2

SQLスクリプトを実行して数値に置き換えると、空またはnullが返されます

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

= ! は何をしますか? 支持する?これは平等ではありませんか?

4

2 に答える 2

7

それはまったくオペレーターではありません!

あなたの場合、データベースオブジェクトによって提供されるメソッド( 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)ます。

于 2013-08-23T04:17:50.430 に答える
7

Q: = ! は何を意味しますか? 支持する?これは平等ではありませんか?

いいえ。等しくないコンパレータはfoo != bar orになりますfoo <> bar

query_field関数を調べて、それが何をしているのかを理解する必要があると思います。クエリは等号比較を行うことを意図しているようで、その感嘆符はプレースホルダーです。(私はそのquery_field関数に詳しくありません。少なくとも、これまでに見た mysql_、mysqli_、または PDO 関数のようには見えません。)

とは$dbs? それはどのようなオブジェクトですか?このメソッドが定義されている場所だと思います。

パラメータ化されたクエリを疑似サポートするために、誰かが mysql インターフェイスの上にレイヤーを追加したと思われます。おそらく、関数の 2 番目の引数は、SQL テキストに含まれる前に mysql_real_escape_string を介して実行され、感嘆符 (!) が置き換えられます。それが最も可能性の高い説明のようです。

于 2013-08-23T04:18:17.607 に答える