Ошибка в запросе INSERT INTO php

Пытаюсь выполнить такой запрос:

 $rs = mysql_query("INSERT INTO street1 (user_id) VALUES('$user['id']')");

В итоге, из-за $user['id'] возникает ошибка. Если вывести $user['id'] через echo - значение будет определено. Как я понимаю, подставлять значение в таком виде запрещено?


Ответы (2 шт):

Автор решения: Ипатьев

Проблема в том что ты пихаешь переменную прямо в запрос. А надо всегда передавать переменные отдельно

Чтобы правильно добавить данные в БД, надо

  1. Написать запрос, в котором все переменные заменить на знаки вопроса
  2. Подготовить запрос к выполнению
  3. Привязать переменные к запросу
  4. Выполнить

В итоге получаем такой код:

<?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']."')");
→ Ссылка