繁体   English   中英

PHP mysql SELECT QUERY或一个

[英]PHP mysql SELECT QUERY with an Or

mysql_query("SELECT * FROM foo WHERE id ='$foo' OR id = '$foo2");

这行不通。

基本上,我希望能够在id是一个变量的值或另一个变量的值的情况下选择它。

谢谢。

编辑:ID列是数字。

我想你忘了最后一个字符

mysql_query("SELECT * FROM foo WHERE id ='$foo' OR id = '$foo2'");

但是由于id列是数字列,因此您应该使用:

mysql_query("SELECT * FROM foo WHERE id = $foo OR id = $foo2");

正如其他人所说并已确认的那样,问题是您正在使用字符串文字与数字列进行比较。 为了使其正常工作,查询应类似于

mysql_query("SELECT * FROM foo WHERE id =$foo OR id = $foo2");

但是,此解决方案具有非常非常不好的代码味道!

首先,这就是IN存在的原因:能够写

mysql_query("SELECT * FROM foo WHERE id IN ($foo, $foo2)");

其次,您是否将未转义的字符串注入查询? 如果是这样,您的代码很容易受到sql注入的攻击! 为了安全起见,请转义并引用变量,就像这样(在一般情况下):

$query = sprintf("SELECT * FROM foo WHERE id IN ('%s', '%s')",
                 mysql_real_escape_string($foo),
                 mysql_real_escape_string($foo2));
mysql_query($query);

或类似这样,因为在这种特定情况下,您知道我们正在谈论整数值:

$query = sprintf("SELECT * FROM foo WHERE id IN (%s, %s)",
                 intval($foo), intval($foo2));
mysql_query($query);

脚注:我知道使用sprintf时,也可以只使用%d代替%s作为格式说明符,从而处理整数值。 但是,我认为只要查看一个位置(参数列表)而不是多个位置(是否对变量使用intval ?),就可以证明您正确地对变量进行转义(也许我没有,但是我正在使用%d中的格式字符串,这样我还是可以吗?)。 听起来可能违反直觉,但面对修改时它会更健壮。

尝试这个:

mysql_query(sprintf("SELECT * FROM foo WHERE id = %s OR id = %s", $foo, $foo2));

我建议您使用mysql_error()获取mysql错误(如果存在)。

mysql_query( .. ) or die('Erro:'.mysql_error());

mysql_error返回mysql中发生的最后一个错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM