0

私はしばらく前にPHPサイドプロジェクトを開始し、最近すべてのコードのクリーンアップと更新を開始しました。その一部は、DBクエリにPDOを使用し始めるように物事を動かすことです。ある特定のクエリでは、関数とともに句WHEREを使用する句ステートメントがあります。これまでのところ、これを適切に機能させることはできませんでした。誰かがそれが機能するかどうかさえ指摘していただければ幸いです。BETWEENINET_ATON()

この質問を見つけたので、BETWEENステートメントに問題はないと思いましたが、問題の原因となっている機能との組み合わせである可能性があります。

クエリのその部分は次のようになります。

SELECT foo, bar FROM table JOIN more_table 
WHERE item1 = :value AND ip_address BETWEEN INET_ATON(:ipstart) AND INET_ATON(:ipend)

実際のクエリはそれよりもかなり大きいですが、基本的にはこれで機能します。トークンを実際の値に置き換えるために、次のforeachループを設定しています(var_dump正しい値が渡されていることを確認できるように、そこにあります)。

foreach($p as $k=>$v) {
    echo var_dump($k, $v);
    if(is_int($v)){
        $querySubmit->bindValue($k, $v, PDO::PARAM_INT);
    } else {
        $querySubmit->bindValue($k, $v, PDO::PARAM_STR);
    }
}

とを使用するように設定されたクエリに制限があるかどうかPDO::Prepareを誰かが知っている場合は、知っていただければ幸いです。PDO::bindValueBETWEENINET_ATON()

4

2 に答える 2

0

のパラメータbindValue()は次の$k ようになります:value

foreach($p as $k=>$v) {
    echo var_dump($k, $v);
    if(is_int($v)){
        $querySubmit->bindValue(:value, $v, PDO::PARAM_INT);
    } else {
        $querySubmit->bindValue(:value, $v, PDO::PARAM_STR);
    }
}

また、あなたは拘束力が:ipstartあり:ipendますか?

于 2013-01-11T17:14:02.870 に答える
0

問題は、コードの別のセクションにあることになりました。SQLクエリに渡される値は正しく、bindValue操作は正常に機能していました。

将来この質問をレビューし、同様の問題が発生していると思われる場合は、正しく設定されていれば、でINET_ATON/NTOA()関数を使用しても問題はありませんBETWEEN

@MarcBが残した最初のコメントは、おそらくこれに対する最良の答えだったと思います。「PDOにはMySQL関数の知識がまったくありません。MySQLパーサーがクエリ文字列を拒否しない限り、PDOは何でも喜んで押し込みます。どこでも好きな場所に。」

于 2013-01-14T14:31:57.600 に答える