2013-10-15 19 views
0

编辑:下面的工作代码!下面无法获得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();   

糟糕的代码:

我已经试过这一切可能的方式,我似乎无法得到它的工作。我注意到一个变体只有在我有一个$查询才能输入时才有效。如果它有不止一个,它会失败。

//* 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()); 
} 

它使连接,我只是修剪了一些代码,以便更容易遵循。表存在,等等...也尝试了主要的例子,逐字逐句,它似乎并没有工作。我哪里错了?

+0

尝试在您的“INSERT”语句之一中使用未存在的表来查看脚本将如何反应。我的意思是,你不应该使用没有错误处理的脚本。 –

回答

1

你必须在每个陈述的末尾加上;。还总是检查错误$mysqli->error。现在

查询看起来完全一样

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

这是不正确的。

+0

什么声明缺少一个; ?? –

+0

@BrianV。你的第一个插入。 –

+0

@BrianV。 - 这不是你的PHP代码,它是错误的分号,它是SQL语句。 – andrewsi

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');";