Подготовленные операторы в SQL-запросе при сохранении данных JSON в PHP - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть простой php-код для анализа некоторых данных из файла JSON и сохранения их в базе данных mysql.Но он показывает следующую ошибку:

Parse error: syntax error, unexpected 'my_name' (T_STRING) in C:\xampp\htdocs\mycode.php on line 25

Мой php-код следующий:

$sql = "INSERT INTO table1 (my_name, hobby, other) VALUES ($row['my_name'], $row['hobby'], $row['other'])"; //line 25

mysqli_query ($conn, $sql);        

Почему он показывает синтаксическую ошибку?Что-то не так в запросе?

1 Ответ

1 голос
/ 21 сентября 2019

Вам необходимо заключить интерполированные заполнители в фигурные скобки, например: $row['my_name'] -> {$row['my_name']}:

    $sql = "INSERT INTO table1 (my_name, hobby, other) VALUES ({$row['my_name']}, {$row['hobby']}, {$row['other']})";

Это касается только синтаксиса PHP.Синтаксическая ошибка SQL, которую вы получаете сейчас, является следующей проблемой.Самое простое, что можно «исправить», это включить дополнительные апострофы вокруг заполнителей, то есть

    $sql = "INSERT INTO table1 (my_name, hobby, other) VALUES ('{$row['my_name']}', '{$row['hobby']}', '{$row['other']}')";

НО ЭТО НЕ ДЕЛАЕТ, , поскольку этот код является примером классического Уязвимость SQL-инъекции .

Попробуйте вместо этого использовать подготовленный оператор - это полностью исключает интерполяцию строк в PHP.

...