MySQL num_rows不返回值(SELECT INTO)

时间:2014-01-20 09:37:59

标签: php mysql mysqli rows mysql-num-rows

当我在PHP中运行此代码时,值正确返回

$result = $mysqli->query("SELECT `id`, `last_key_ID` FROM `customers` WHERE `email` = '{$email}';");

但是只要我添加INTO语法,num_rows就不会返回值:

$result = $mysqli->query("SELECT `id`, `last_key_ID` INTO @id, @last_key_id FROM `customers` WHERE `email` = '{$email}';");

SELECT-INTO代码后只有一行回显

echo $result->num_rows;

PS:相同的SELECT-INTO代码似乎完全在MySQL控制台中运行,为什么它在PHP中不起作用?

5 个答案:

答案 0 :(得分:1)

尝试:

$mysqli->query('SET @id := 0');
$mysqli->query('SET @last_key_id := 0');
$result = $mysqli->query("SELECT @id:=id, @last_key_id:=last_key_ID FROM `customers` WHERE `email` = '{$email}';");

答案 1 :(得分:1)

由于SELECT ... INTO语句不直接返回数据(即使在MySQL控制台中,它也不会显示SELECT语句的结果,只会显示

   Query OK, 1 row affected (0.01 sec)

您无法使用num_rows功能。

所以请改用echo $result->affected_rows

答案 2 :(得分:0)

MySQL Server不支持SELECT ... INTO TABLE Sybase SQL扩展。

相反,MySQL服务器支持INSERT INTO ... SELECT标准SQL语法,这基本上是相同的。

Example...

Read more...

答案 3 :(得分:0)

原因很简单,您将简单的查询输出分配到mysql的会话变量中。

分配正在后端进行。现在你必须获取那个mysql会话变量。

尝试此查询:

$result = $mysqli->query("SELECT `id`, `last_key_ID` INTO @id, @last_key_id FROM `customers` WHERE `email` = '{$email}';SELECT @id, @last_key_id;");

希望这会对你有所帮助。

答案 4 :(得分:0)

Pradeep发布了一个似乎足以让它发挥作用的答案。但我仍然没有看到使用SELECT INTO语句的任何特殊原因。

我会说除非你有特殊的理由使用它,否则最好像这样使用普通的SELECT语句

$result = $mysqli->query("SELECT `id`, `last_key_ID` FROM `customers` WHERE `email` = '{$email}';");

然后,使用mysql_fetch_assoc从不同列中检索数据。这将为您提供更好的性能和更少的数据库服务器工作负载。