2013-09-29 3 views
1

Я использую оригинальный (без изменений) класс ezsql-mysql в php. мой механизм базы данных является innodb. все работает отлично, но один запрос на одной странице. Когда я копирую базу кода из некоторых других рабочих страниц, все необходимое, как классы и функции, уже добавлено. Перед запросом проблемы есть еще один запрос, который работает нормально. Кроме того, запрос с проблемой работает вне файла php, когда я напрямую копирую его в phpmyadmin.Mysql Query не работает в файле Php

$db->query(" 
    BEGIN; 
    INSERT INTO places (name, latitude, longitude) 
     VALUES ('Place of $event_name', '$latitude', '$longitude'); 
    INSERT INTO events (place_code, event_name, start_time, owner_id) 
     VALUES (LAST_INSERT_ID(),'$event_name', '$start_time', '$owner_id'); 
    COMMIT; 
    "); 
//this echo part was just for copying to phpmyadmin 
    echo " 
    BEGIN; 
    INSERT INTO places (name, latitude, longitude) 
     VALUES('Place of $event_name', '$latitude', '$longitude'); 
    INSERT INTO events (place_code, event_name, start_time, owner_id) 
     VALUES(LAST_INSERT_ID(),'$event_name', '$start_time', '$owner_id'); 
    COMMIT; 
    "; 

Каждый раз, когда я использую эту страницу, мой сервер создает журнал ошибок в каталоге этой страницы. и ошибка

[29-Sep-2013 12:58:00] PHP Warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO places (name, latitude, longitude) 
    VALUES ('Place of asd', '39.76' at line 2 in /home7/eyselnet/public_html/business/injoin/demo/sql/ez_sql_mysql.php on line 233 

И это то, что произойдет, когда я просто скопировать и вставить тот же запрос в PHPMyAdmin

BEGIN;# MySQL returned an empty result set (i.e. zero rows). 
INSERT INTO places (name, latitude, longitude) VALUES('Place of asd', '39.7617657', '30.5056083');# 1 row affected. 
INSERT INTO events (place_code, event_name, start_time, owner_id) VALUES(LAST_INSERT_ID(),'asd', '1357884000', '1');# 1 row affected. 
COMMIT;# MySQL returned an empty result set (i.e. zero rows). 

Можете ли вы помочь мне выяснить, в чем проблема? В худшем случае я могу изменить свой код, чтобы он работал по-другому. Но вместо этого я прошу помощи понять. потому что это выглядит так странно, что запрос, который обычно работает на phpmyadmin, имеет проблемы в php-файле.

благодарит заранее.

+0

Не делайте 'begin' и' commit' как часть того же запроса ... если вы используете транзакционный движок db, делайте это как отдельные запросы –

ответ

0

Я не знаю об упомянутом классе, но функции mysql(i) в php (я думаю, PDO тоже) позволяют выполнять только один запрос на вызов функции. Поэтому вам нужно будет разделить свои BEGIN; и COMMIT; на собственные запросы MySQL.

РЕДАКТИРОВАТЬ: Вы, разумеется, должны сделать два INSERTs отдельно.

+0

да, это правда. вероятно, это была проблема. когда я делаю быстрый поиск, я обнаружил это; [mysqli_multi_query] (http://se2.php.net/manual/en/mysqli.multi-query.php) , но, по-видимому, мой класс ezsql не поддерживает это. –

+0

Обратите внимание, что ограничение одного запроса на вызов также является механизмом безопасности для предотвращения некоторых типов SQL-инъекций. Не используйте 'mysql [i] _multi_query()', если вам действительно не нужно (и я не могу действительно думать о таком случае). – TheWolf

+0

Хорошо, спасибо. Я просто подумал, что лучше использовать меньше соединений, меньше запросов для оптимизации вещей. –

Смежные вопросы