ai didi

带有 Or 的 PHP mysql SELECT QUERY

转载 作者:行者123 更新时间:2023-12-01 00:29:35 24 4
gpt4 key购买 nike

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

这行不通。

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

谢谢。

编辑:ID 列是数字。

最佳答案

正如其他人所说并且您已确认,问题在于您使用字符串文字与数字列进行比较。为了让它工作,查询应该看起来像

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

但是,这个解决方案有非常非常糟糕的代码味道!

首先,这就是为什么 IN存在:能够写

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

其次,您是否在查询中注入(inject)了未转义的字符串?如果是,则您的代码容易受到 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 所以我还可以吗?)。这听起来可能违反直觉,但它在面对修改时更加稳健。

关于带有 Or 的 PHP mysql SELECT QUERY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182896/

24 4 0
文章推荐: php - 编写这两个 SQL 查询的更好方法?
文章推荐: java - 与访问 mysql 数据库中的相同数据相比,访问 java 列表(arraylist)是否更快?
文章推荐: z3 - 支持 AUFBV?
文章推荐: jquery - 自定义摘要身份验证
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com