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

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

0 голосов
/ 10 сентября 2010

Эта часть моего кода создает несколько запросов следующим образом:

$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 assignments (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');

ТОГДА я вручную запускаю SQL в PhpMyAdmin, он работает нормально, но почему он не работает, когда PHP выполняет его и выдает ошибку?

Ответы [ 4 ]

1 голос
/ 10 сентября 2010

изучите SQL, братан, он правит;)

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

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

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

1 голос
/ 10 сентября 2010

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

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

1 голос
/ 10 сентября 2010

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 голосов
/ 10 сентября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...