Ошибка в запросе INSERT INTO php
Пытаюсь выполнить такой запрос:
$rs = mysql_query("INSERT INTO street1 (user_id) VALUES('$user['id']')");
В итоге, из-за $user['id'] возникает ошибка. Если вывести $user['id'] через echo - значение будет определено. Как я понимаю, подставлять значение в таком виде запрещено?
Ответы (2 шт):
Автор решения: Ипатьев
→ Ссылка
Проблема в том что ты пихаешь переменную прямо в запрос. А надо всегда передавать переменные отдельно
Чтобы правильно добавить данные в БД, надо
- Написать запрос, в котором все переменные заменить на знаки вопроса
- Подготовить запрос к выполнению
- Привязать переменные к запросу
- Выполнить
В итоге получаем такой код:
<?php
// подключаем соединение
require_once 'mysqli.php';
// создаем запрос SQL в котором все переменные заменены на знак вопроса
$sql = "INSERT INTO street1 (user_id) VALUES (?)";
// подготоваливаем запрос
$stmt = $mysqli->prepare($sql);
// привязываем переменные к запросу
// указывая тип для каждой переменной. для простоты всегда можно использовать тип "s"
$stmt->bind_param("s", $user['id']);
// выполняем запроc
$stmt->execute();
при таком способе у нас никогда не будет ошибок синтаксиса, не говоря уже об sql инъекциях.
Автор решения: prophp
→ Ссылка
используйте фигурные скобки
$rs = mysql_query("INSERT INTO street1 (user_id) VALUES('{$user['id']}')");
или уберите одинарные кавычки в массиве
$rs = mysql_query("INSERT INTO street1 (user_id) VALUES('$user[id]')");
если вам принципиально, то можно так
$rs = mysql_query("INSERT INTO street1 (user_id) VALUES('".$user['id']."')");