SQL 当 WHERE 子句为假时,查询 returns TABLE 中的第一行
SQL query returns first row in TABLE when WHERE clause is false
对于阅读本文的任何人:上面的已经回答 link与问题无关。
以下查询应该 return 条件为真时的结果或运算符失败时的空数组。
(切记,我非常希望这个查询失败并且 return 什么都没有)。
$search = 'a-long-winded-string';
$sql = "SELECT * FROM table WHERE `id` = '$search'";
这里的问题是它 return 成功时是正确的行,但失败时总是默认为 table 中的第一行(id 为 0)。将第一行 ID 更改为 0 可以解决此问题。
我这里的假设是查询失败,查询的是布尔结果。
是否有解释为什么失败的查询 return 是 ID 为 0 的行?
<?php
$search = 'string';
$sql = "SELECT * FROM foo WHERE `id` = '$search'";
// execute query...
如果您的值不是数字,则应该用引号引起来。
基本上您的搜索字符串评估为 0,因为 id
很可能是一个整数列。
mysql> select cast('foo' AS UNSIGNED);
+-------------------------+
| cast('foo' AS UNSIGNED) |
+-------------------------+
| 0 |
+-------------------------+
1 row in set, 1 warning (0.00 sec)
对于阅读本文的任何人:上面的已经回答 link与问题无关。
以下查询应该 return 条件为真时的结果或运算符失败时的空数组。
(切记,我非常希望这个查询失败并且 return 什么都没有)。
$search = 'a-long-winded-string';
$sql = "SELECT * FROM table WHERE `id` = '$search'";
这里的问题是它 return 成功时是正确的行,但失败时总是默认为 table 中的第一行(id 为 0)。将第一行 ID 更改为 0 可以解决此问题。
我这里的假设是查询失败,查询的是布尔结果。
是否有解释为什么失败的查询 return 是 ID 为 0 的行?
<?php
$search = 'string';
$sql = "SELECT * FROM foo WHERE `id` = '$search'";
// execute query...
如果您的值不是数字,则应该用引号引起来。
基本上您的搜索字符串评估为 0,因为 id
很可能是一个整数列。
mysql> select cast('foo' AS UNSIGNED);
+-------------------------+
| cast('foo' AS UNSIGNED) |
+-------------------------+
| 0 |
+-------------------------+
1 row in set, 1 warning (0.00 sec)