2

通过 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 的问题。似乎当它运行查询的第一部分时,返回的结果是空的,因此给出了一个布尔错误。我猜我必须跳过第一组结果,但我不知道该怎么做?

4

2 回答 2

2

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

  1. 分别运行每个查询(不知道这是否可行):

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

要回答您更新的问题:查看 PHP 手册页以了解 multi_query。我想你会想要使用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);
}
于 2009-08-04T12:05:14.710 回答
0

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

于 2009-08-04T11:54:06.293 回答