mysqli多个查询 - 设置变量产生布尔错误/如何跳过这个?

时间:2009-08-04 11:47:21

标签: php mysql mysqli multi-query

通过phpmyadmin得到以下简单查询,但是当我将它添加到我的php网站时,没有返回任何结果,也没有错误/警告消息。如果我删除“SET @ N = -1;”然后它运作正常。

<?php 
$db_connect = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, true);
mysql_select_db(DB_NAME, $db_connect);

$test_query = mysql_query("SET @N=-1;SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`;");

for ($i = 0; $i <= mysql_num_rows($test_query)-1; $i++) {
   echo mysql_result($db_directorymap, $i, 0) . " " . mysql_result($db_directorymap, $i, 1) . "<br />";
}
?>

更新:我刚搬到mysqli但当然我仍然遇到mysql语句和mysqli_multi_query的问题。它似乎在运行查询的第一部分时返回的结果为空,因此给出了布尔错误。我猜我必须跳过第一组结果,但我不知道该怎么做?

2 个答案:

答案 0 :(得分:2)

这是因为mysql_query函数只接受一个查询,但你已经给它两个,用分号分隔。尝试:

  1. 单独运行每个查询(不知道这是否有效):

    mysql_query( "SET @N=-1" );
    mysql_query( "SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`" );
    
  2. mysqlimulti_query函数一起使用(如果有的话,使用PDO等效函数。)

  3. 要回答您更新的问题:请查看multi_query的PHP手册页。我想你会想要使用mysqli::next_result。这样的事情,使用程序风格:

    mysqli_multi_query($link, $query);
    mysqli_next_result($link);
    
    if ($result = mysqli_store_result($link)) {
        while ($row = mysqli_fetch_row($result)) {
            printf("%s\n", $row[0]);
        }
        mysqli_free_result($result);
    }
    

答案 1 :(得分:0)

不支持通过mysql_query进行多次查询,所以我猜它只执行SET命令,而不是后续的SELECT命令。