当WHERE子句为false时,SQL查询返回TABLE中的第一行

时间:2016-06-15 16:37:52

标签: php sql phpmyadmin

对于阅读此内容的任何人:上面的已经回答链接与此问题无关。

以下查询应在条件为true时返回结果,或在运算符失败时返回空数组。

(请记住,我主动希望此查询失败并且不返回任何内容。)

$search = 'a-long-winded-string';
$sql = "SELECT * FROM table WHERE `id` = '$search'";

这里的问题是它在成功时返回正确的行但是在失败时总是默认为表中的第一行(id为0)。将第一行ID从0更改为补救措施。

我的假设是查询失败并且查询布尔结果。

是否有一个解释为什么失败的查询返回ID为0的行?

1 个答案:

答案 0 :(得分: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)