2

当我运行 sql 脚本并将其替换为数字时,它返回空或 null

   $order_f = $dbs->query_field("SELECT order_id FROM orders WHERE order_center_id = !", $record['cust_id']);

= 是什么意思?代表?这不是平等的吗?

4

2 回答 2

7

根本就不是运营商!

query_field()在您的情况下,您的数据库对象(我认为它基于MDB2 )提供的方法似乎提供了某种准备好的语句,其中感叹号用于占位符。我想象以下查询是根据您的代码执行的:

SELECT order_id FROM orders WHERE order_center_id = 123

123的值在哪里$record['cust_id']

旧答案

在您的情况下!=(or <>)可能=!与(or )相同= NOT(...),因为“不等于”可能被认为与“等于倒数”相同,但仅适用于布尔值逻辑。比较字符串时它不起作用。

此外,运算符优先级也有所不同:

a = !b & c

这被评估为a = NOT(b) & c

a != b & c

而这被评估为a = NOT(b & c)

于 2013-08-23T04:17:50.430 回答
7

问: = 是什么意思?代表?这不是平等的吗?

不。不等于比较器将是foo != barfoo <> bar

我认为您需要查看该query_field功能以弄清楚它在做什么。看起来该查询旨在进行等于比较,而该感叹号是一个占位符。(我不熟悉那个query_field函数;它看起来不像 mysql_、mysqli_ 或 PDO 函数,至少,我见过。)

是什么$dbs?那是一个什么样的物体?我敢打赌,这就是定义此方法的地方。

我怀疑有人在 mysql 接口之上添加了一个层来伪支持参数化查询。很可能,函数的第二个参数在包含在 SQL 文本中之前通过 mysql_real_escape_string 运行,替换了 bang (!)。这似乎是最可能的解释。

于 2013-08-23T04:18:17.607 回答