1

こんにちは、次の問題があります。

mysqli_multi_query 関数を使用していくつかの INSERT INTO クエリを実行しようとすると、どれも実行されず、標準の「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 構文にエラーがあります。near 'INSERT INTO production VALUES( 120, 107, 5, 1, 0 ); を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。INSERT INTO production VALUE' の 1 行目

string(210) "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 ); "

bool(偽)

この動作を自分でテストしたい場合は、次の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 ;

私は何かを見落としていますか、それとも単に奇妙な行動ですか?

4

2 に答える 2

3

エラーの可能性を最小限に抑えるためにこれを行います

INSERT INTO production VALUES (120,103,10,0,0), 
(120,107,5,1,0), (120,106,7,2,0), (120, 103,20,0,1);
于 2010-12-15T15:48:56.910 に答える
1

最後のエントリのセミコロンを削除する必要があります。

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 )
于 2010-12-15T15:21:05.480 に答える