【问题标题】:mysqli_multi_query fails on multiple insertsmysqli_multi_query 多次插入失败
【发布时间】:2010-12-15 15:03:09
【问题描述】:

您好,我遇到了以下问题:

当我尝试使用 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 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'INSERT INTO production VALUES(120, 107, 5, 1, 0) 附近使用的正确语法;在第 1 行插入生产价值'

string(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 ;

我是否忽略了某些东西,或者这只是奇怪的行为?

【问题讨论】:

  • 您确定查询之间允许换行吗?
  • 请参阅“这些都在一个字符串中,分号后用空格分隔。”:字符串中实际上没有换行符,我只是为浏览器美化了它。顺便说一句,ajreal 的建议解决了这个问题。

标签: php mysqli syntax-error insert-into mysqli-multi-query


【解决方案1】:

我会这样做以尽量减少出错的机会

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

【讨论】:

    【解决方案2】:

    您应该删除最后一个条目的分号。

    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 )
    

    【讨论】:

    • 没有骰子,仍然得到同样的错误。不过谢谢你的建议:)
    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 2016-11-26
    • 2011-07-01
    • 2023-03-27
    • 2017-08-27
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    相关资源
    最近更新 更多