mysqli_multi_query не работает при нескольких вставках

Приветствую, у меня следующая проблема:

Когда я пытаюсь выполнить несколько запросов INSERT INTO с помощью функции mysqli_multi_query, ни один из них не выполняется, и я получаю стандартное сообщение У вас есть ошибка в синтаксической ошибке SQL, но когда я беру ту же самую строку, которую я передал функции, и вставляю в PHPMyAdmin и запустите его, он работает безупречно!

Вот запросы, которые я пытаюсь выполнить:

INSERT INTO production VALUES( 120, 103, 10, 0, 0 ); 
INSERT INTO production VALUES( 120, 107, 5, 1, 0 ); 
INSERT INTO production VALUES( 120, 106, 7, 2, 0 ); 
INSERT INTO production VALUES( 120, 103, 20, 0, 1 );

Они находятся в одной строке, разделенной пробелом после точки с запятой.

Вот что я делаю в коде:

$querytext = $queries // Get all the queries
$query_result = mysqli_multi_query( $this->_connection, $querytext );

if( mysqli_errno($this->_connection) > 0)
    echo mysqli_error($this->_connection);

var_dump( $querytext );
var_dump( $query_result );

Выполнение этого кода приводит к:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с «ВСТАВИТЬ В ПРОИЗВОДСТВЕННЫЕ ЗНАЧЕНИЯ (120, 107, 5, 1, 0); ВСТАВЬТЕ В ПРОИЗВОДСТВЕННОЕ ЗНАЧЕНИЕ в строке 1

строка (210) ВСТАВИТЬ В ПРОИЗВОДСТВЕННЫЕ ЗНАЧЕНИЯ (120, 103, 10, 0, 0); ВСТАВЬТЕ В ПРОИЗВОДСТВЕННЫЕ ЗНАЧЕНИЯ (120, 107, 5, 1, 0); ВСТАВЬТЕ В ПРОИЗВОДСТВЕННЫЕ ЗНАЧЕНИЯ (120, 106, 7, 2, 0); ВСТАВЬТЕ В ПРОИЗВОДСТВЕННЫЕ ЗНАЧЕНИЯ (120, 103, 20, 0, 1);

логический (ложный)

Если вы хотите проверить это поведение самостоятельно, вот таблица production:

CREATE TABLE `production` (
`colonyID` INT NOT NULL ,
`resource_type_being_built` INT NOT NULL ,
`amount_requested` INT NOT NULL ,
`build_list_position` INT NOT NULL ,
`production_number` INT NOT NULL ,
INDEX (  `colonyID` )
) ENGINE = MYISAM ;

Я что-то упускаю из виду или это просто странное поведение?


person Beerdude26    schedule 15.12.2010    source источник
comment
Вы уверены, что между запросами разрешены разрывы строк?   -  person Pekka    schedule 15.12.2010
comment
См. Они находятся в одной строке, разделенной пробелом после точки с запятой.: На самом деле в строке нет разрывов строк, я просто приукрасил ее для браузера. Кстати, предложение ajreal исправило это.   -  person Beerdude26    schedule 15.12.2010


Ответы (2)


Я бы сделал это, чтобы свести к минимуму вероятность ошибки

INSERT INTO production VALUES (120,103,10,0,0), 
(120,107,5,1,0), (120,106,7,2,0), (120, 103,20,0,1);
person ajreal    schedule 15.12.2010

Вы должны удалить точку с запятой для последней записи.

INSERT INTO production VALUES( 120, 103, 10, 0, 0 ); 
INSERT INTO production VALUES( 120, 107, 5, 1, 0 ); 
INSERT INTO production VALUES( 120, 106, 7, 2, 0 ); 
INSERT INTO production VALUES( 120, 103, 20, 0, 1 )
person tHeSiD    schedule 15.12.2010
comment
Нет кубика, все равно получаю ту же ошибку. Но спасибо за предложение :) - person Beerdude26; 15.12.2010