Простая вставка работает с phpmyadmin, но не с php - PullRequest
3 голосов
/ 27 февраля 2010

я пытаюсь вставить этот запрос с mysql_query

INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,1,1) ; 
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,2,1) ; 
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,3,1) ; 
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,4,1) ;

и возвращается: 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '; INSERT INTO um_group_rights (um_group_id, cms_usecase_id, um_right_id) V 'в строке 1

очевидно, что у него проблема с точкой с запятой, но я не понимаю, почему. это работает без проблем в phpmyadmin. версия php 5.2.6

Ответы [ 2 ]

2 голосов
/ 27 февраля 2010

В отличие от phpMyAdmin, mysql_query () может одновременно выполнять только один запрос.

Вам придется разделить строку или переключиться на mysqli и mysqli_multi_query () .

2 голосов
/ 27 февраля 2010

Просто чтобы быть уверенным: когда вы пытаетесь выполнить эти 4 запроса из PHP, вы звоните mysql_query четыре раза?

Например:

mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,1,1)");
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,2,1)");
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,3,1)");
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,4,1)");


Я имею в виду следующее: вы не можете отправить несколько разных запросов одновременно, только с одним вызовом mysql_query (цитирование, выделено мое) :

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

Вы должны «разделить» ваши запросы - что, вероятно, phpMyAdmin делает, не сообщая вам.

И, как @ Александр указал в комментариях:

Строка запроса не должна заканчиваться точка с запятой.


Если вы используете функции mysqli_* (а не mysql_*) для доступа к вашей базе данных, вы можете попробовать использовать mysqli_multi_query.

К сожалению, есть такая функция для mysql_*.

(Кстати: mysql_* API является старым - было бы лучше, особенно для нового проекта, использовать mysqli_*)



Редактировать после комментария:

Если речь идет о выступлениях, да, лучше сделать один вызов в базу данных вместо четырех последовательных вызовов PHP <-> MySQL.

В этом случае вы можете попробовать использовать синтаксис вставки, который позволяет вставлять несколько строк одновременно; см 12.2.5. Синтаксис INSERT в руководстве MySQL (цитирование) :

INSERT операторов, которые используют VALUES Синтаксис может вставлять несколько строк.
Для этого включите несколько списков значений столбцов, каждое из которых заключено в круглые скобки и разделенные запятыми. * * Пример тысяча семьдесят-одна: * * тысяча семьдесят-две

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Список значений для каждой строки должен быть в скобках.

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