当我在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中不起作用?
答案 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语法,这基本上是相同的。
答案 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从不同列中检索数据。这将为您提供更好的性能和更少的数据库服务器工作负载。