正如其他人所说并且您已确认,问题在于您使用字符串文字与数字列进行比较。为了让它工作,查询应该是这样的
mysql_query("SELECT * FROM foo WHERE id =$foo OR id = $foo2");
但是,这个解决方案的代码味道非常糟糕!
首先,这就是IN存在的原因:能够写作
mysql_query("SELECT * FROM foo WHERE id IN ($foo, $foo2)");
其次,您是否在查询中注入了未转义的字符串?如果是,您的代码很容易受到sql injection 的攻击! 转义并引用你的变量是安全的,像这样(在一般情况下):
$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,所以我还可以吗?)。这听起来可能违反直觉,但在修改时它更强大。