Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL SELECT正在选择与查询不匹配的行_Php_Mysql - Fatal编程技术网

Php SQL SELECT正在选择与查询不匹配的行

Php SQL SELECT正在选择与查询不匹配的行,php,mysql,Php,Mysql,我使用php mysql_查询从我的SQL数据库中选择行,但出于某种原因,它选择的行与查询不匹配。例如: mysql_query("SELECT * FROM Table WHERE ID='153'") 这将返回ID为153的行 但我们也将: mysql_query("SELECT * FROM Table WHERE ID='153c'") 我做错什么了吗?为什么要将ID值作为字符串传递?这很可能是你的问题。请尝试传递以下查询: mysql_query("SELECT * FROM Ta

我使用php mysql_查询从我的SQL数据库中选择行,但出于某种原因,它选择的行与查询不匹配。例如:

mysql_query("SELECT * FROM Table WHERE ID='153'")
这将返回ID为153的行

但我们也将:

mysql_query("SELECT * FROM Table WHERE ID='153c'")

我做错什么了吗?

为什么要将ID值作为字符串传递?这很可能是你的问题。请尝试传递以下查询:

mysql_query("SELECT * FROM Table WHERE ID= 153")

这样,要搜索的ID值是int或ID列设置为的任何其他原语。这应该适当地限制ID。此外,如果要使用数字创建ID,最好只使用不同的整数,而不使用字符串。

如前所述,问题是将字符串值与整数值进行比较。你的表达是:

WHERE ID = '153' and
WHERE ID = '153a'
您可以想象MySQL引擎将其功能描述为:id是一个整数列。所以,我需要将它与一个整数值进行比较。哦,右边是一个字符串,所以我将把右边转换成一个整数

MySQL将值从字符串转换为数字的方式可以称为静默转换。它转换找到的最长前导数字,然后停止。如果没有前导数字,如“a123”,则该值为0。没有产生错误

如果你真的想把自己弄糊涂,请考虑以下内容:

select (case when 123 = '123e' then 1 else 0 end),
       (case when 123 = '123e3' then 1 else 0 end),
       (case when 123 = '123a' then 1 else 0 end),
       (case when 123 = '123a3' then 1 else 0 end)
返回:true、false、true和true。为什么第二个是假的,而其他的是真的?“123e3”被解释为科学符号,所以值变成123000。对于所有其他字符,转换在第一个字母字符处停止


如其他答案中所述,明显的解决方法是删除常量上的单引号。

将数字字符串数据隐式转换为数字…mysql\u querySELECT*FROM Table,其中ID='153c'您缺少这行代码中的一个双引号缺少引号只是键入问题时的一个错误,但米奇麦是对的。