无法使multi_query()工作

时间:2013-10-15 15:27:21

标签: php mysqli mysqli-multi-query

已编辑:以下工作代码!

//* opens a connection to a MySQL server */
$mysqli = new mysqli($host, $username, $password, $database);

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}


$query = "INSERT INTO `test` (test1, test2) VALUES('testing','testing2222');";
$query .= "INSERT INTO `test` (test1, test2) VALUES('testing3333','testing44444');";
$query .= "INSERT INTO `test` (test1, test2) VALUES('testing5555','testing66666');";
$query .= "INSERT INTO `test` (test1, test2) VALUES('testing77777','testing888888');";
$query .= "INSERT INTO `test` (test1, test2) VALUES('testing99999','testing101010');";


if ($mysqli->multi_query($query)) {
    do {
        /* store first result set */
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_row()) {
                //printf("%s\n", $row[0]);
            }
            $result->free();
        }
     /* print divider */
    //if ($mysqli->more_results()) {
    //  printf("-----------------\n");
    //}
    } while ($mysqli->next_result());
}

/* close connection */
$mysqli->close();           

下面的坏代码:

我已经尽可能地尝试了这一点,但我似乎无法让它发挥作用。我注意到只有当我有一个$ query要输入时,一个变体才会起作用。如果它有多个,它就会失败。

//* opens a connection to a MySQL server */
$mysqli = mysql_connect($host,$username,$password, $database);



$query  = "INSERT INTO `test` (test1, test2) VALUES('testing','testing2222')";
$query  .= "INSERT INTO `test` (test1, test2) VALUES('testing3333','testing44444')";


if($mysqli->multi_query($query))
 { 
    do
    {

        if($result=$mysqli->store_result())
        {
            while($row=$result->fetch_row())
            {
                printf("%s<br/>",$row[0]);
            }
            $result->free();
        }

        if($mysqli->more_results())
        {
            print("-------------------------------<br/>");
        }
        else
        {
            echo '<br/>';
        }
    }while($mysqli->more_results() && $mysqli->next_result());
 }

它建立了连接,我只修剪了一些代码,以便更容易理解。表存在等等......也逐字逐句地尝试了主要的例子,但它似乎没有用。我哪里错了?

2 个答案:

答案 0 :(得分:1)

您必须在每个语句的末尾添加;。还要经常检查错误$mysqli->error

现在您的查询看起来与此完全相同

INSERT INTO `test` (test1, test2) VALUES('testing','testing2222')INSERT INTO `test` (test1, test2) VALUES('testing3333','testing44444')

这是不正确的。

答案 1 :(得分:0)

每个查询结尾都需要一个分号。 MySQL正在等待语句的结束。请参阅MySQL文档中的以下内容:

  

不需要在一行上给出所有命令,因此需要多行的冗长命令不是问题。 mysql通过查找终止分号来确定语句的结束位置,而不是查找输入行的结尾。 (换句话说,mysql接受自由格式输入:它收集输入行但在看到分号之前不执行它们。)

改变这个:

$query  = "INSERT INTO `test` (test1, test2) VALUES('testing','testing2222')";
$query  .= "INSERT INTO `test` (test1, test2) VALUES('testing3333','testing44444')";

到此:

$query  = "INSERT INTO `test` (test1, test2) VALUES('testing','testing2222');";
$query  .= "INSERT INTO `test` (test1, test2) VALUES('testing3333','testing44444');";