Выполнение MySQL Query from PHP error

0

Эта часть моего кода создает несколько запросов:

$sql = "";

$sql .= "INSERT INTO projects
        (project_id, project_name, project_description, project_deadline, project_status, project_priority)
        VALUES ('" . $project_id . "', '" . $name . "', '" . $description . "', '" . $final_deadline . "', '" . $status . "', '" . $priority . "');";

foreach($assignments as $assigned_user)
{
    $sql .= "INSERT INTO assignments 
             (user_id, project_id, assigned_date) 
             VALUES ('" . $assigned_user . "', '" . $project_id . "', '" . time() . "');";
}

$result = mysql_query($sql) or die(mysql_error());

Однако я получаю сообщение об ошибке:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с назначениями INSERT INTO (user_id, project_id, assign_date) в строке 3

Однако, если я эхо $sql, получается что-то вроде этого:

INSERT INTO projects (project_id, project_name, project_description, project_deadline, project_status, project_priority) VALUES ('7090', 'Sup :D', 'OMG!', '716770800', '1', '1');
INSERT INTO assignments (user_id, project_id, assigned_date) VALUES ('12', '7090', '1284139311');
INSERT INTO assignments (user_id, project_id, assigned_date) VALUES ('11', '7090', '1284139311');

THEN Я вручную запускаю SQL в PhpMyAdmin, он отлично работает, но почему он не работает, когда PHP выполняет его и выдает ошибку?

  • 0
    PhpMyAdmin разделяет ваши запросы и выполняет их отдельно
Теги:
mysql-error-1064

4 ответа

1
Лучший ответ

mysql_query может выполнять только один запрос за раз

Попробуйте следующее:

$sql = "INSERT INTO projects
        (project_id, project_name, project_description, project_deadline, project_status, project_priority)
        VALUES ('" . $project_id . "', '" . $name . "', '" . $description . "', '" . $final_deadline . "', '" . $status . "', '" . $priority . "');";
$result = mysql_query($sql) or die(mysql_error());

foreach($assignments as $assigned_user)
{
    $sql = "INSERT INTO assignments 
             (user_id, project_id, assigned_date) 
             VALUES ('" . $assigned_user . "', '" . $project_id . "', '" . time() . "');";
    $result = mysql_query($sql) or die(mysql_error());
}
  • 0
    Оу ... так как я могу выполнить несколько запросов?
  • 0
    Выполняя каждый запрос отдельно. Или используйте предложение салазок.
1

узнать SQL bro, это правила;)

$sql = "INSERT INTO assignments 
             (user_id, project_id, assigned_date) ";

foreach($assignments as $assigned_user)
{
  $sql.= " VALUES ('" . $assigned_user . "', '" . $project_id . "', '" . time() . "') ";
}

Я надеюсь, что у вас есть все ваши переменные.

1

несколько запросов не поддерживаются функцией mysql_query. Проверьте mysqli:: multi_query

http://php.net/manual/en/mysqli.multi-query.php

0

Я предполагаю, что функция mysql_query не позволит выполнять несколько операторов, каждый оператор должен выполняться индивидуально.

Если посмотреть на большую картинку, рассмотрите следующую публикацию: Перезапись данных в таблице MySQL. Таким образом, создание запросов путем конкатенации строк по мере того, как вы делаете это рецепт катастрофы, вы будете уязвимы к атакам SQL-инъекций и другим ошибкам. Подумайте об использовании уровня абстракции PDO вместо того, чтобы вызывать определенные функции mysql и изучать использование параметризованных запросов вместо создания строк, как вы это делаете.

Это стандартная ошибка, которую делают новички (не помогающие обильными примерами в Интернете и в книгах, дающих плохое руководство), поэтому не чувствуйте себя плохо, если вы новичок, просто имейте в виду, что вы не должны использовать этот подход в производственных системах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню