SQLスクリプトを実行して数値に置き換えると、空またはnullが返されます
$order_f = $dbs->query_field("SELECT order_id FROM orders WHERE order_center_id = !", $record['cust_id']);
= ! は何をしますか? 支持する?これは平等ではありませんか?
それはまったくオペレーターではありません!
あなたの場合、データベースオブジェクトによって提供されるメソッド( MDB2query_field()
に基づいていると思います)は、プレースホルダーに感嘆符が使用されるある種の準備済みステートメントを提供しているようです。コードに基づいて次のクエリが実行されると想像しています。
SELECT order_id FROM orders WHERE order_center_id = 123
123
の値はどこにありますか$record['cust_id']
。
古い答え
あなたの場合、!=
(または<>
)は=!
(または)と同じ= NOT(...)
になる可能性があります。これは、「等しくない」は「の逆に等しい」と同じと見なされる可能性があるためですが、ブール値ロジックの場合のみです。文字列を比較するときは機能しません。
また、演算子の優先順位にも違いがあります:
a = !b & c
これは として評価されa = NOT(b) & c
ます。
a != b & c
一方、これは と評価されa = NOT(b & c)
ます。
Q: = ! は何を意味しますか? 支持する?これは平等ではありませんか?
いいえ。等しくないコンパレータはfoo != bar
orになりますfoo <> bar
query_field
関数を調べて、それが何をしているのかを理解する必要があると思います。クエリは等号比較を行うことを意図しているようで、その感嘆符はプレースホルダーです。(私はそのquery_field
関数に詳しくありません。少なくとも、これまでに見た mysql_、mysqli_、または PDO 関数のようには見えません。)
とは$dbs
? それはどのようなオブジェクトですか?このメソッドが定義されている場所だと思います。
パラメータ化されたクエリを疑似サポートするために、誰かが mysql インターフェイスの上にレイヤーを追加したと思われます。おそらく、関数の 2 番目の引数は、SQL テキストに含まれる前に mysql_real_escape_string を介して実行され、感嘆符 (!) が置き換えられます。それが最も可能性の高い説明のようです。