2

PDOを使用してこのクエリを実行しようとしています:

select * from users where uuid = 0x1e8ef774581c102cbcfef1ab81872213;

この SQL クエリを PDO の prepare メソッドに渡します。

select * from users where uuid = :uuid

次に、このハッシュマップを渡して実行します。

Array ( [:uuid] => 0x1e8ef774581c102cbcfef1ab81872213 ) 

fetchAll を呼び出すと、次のクエリが mysql サーバーで実行されているようです。

select * from users where uuid = '0x1e8ef774581c102cbcfef1ab81872213';

PDO に 16 進数を引用符で囲わずにクエリを実行するにはどうすればよいですか?

ありがとう、スティーブ

4

1 に答える 1

0

値は、64 ビット版と 32 ビット版の両方で PHP の通常の数値として表現できるもの (128 ビット) をはるかに超えているため、文字列として挿入する必要があります。

たとえば、プレースホルダーをスキップして、クエリ文字列に直接埋め込みます。

$uuid = '0x....';
$sql = "SELECT ... WHERE uuid = $uuid";

つまり、プレースホルダーの利点が失われ、SQL インジェクションの緩和に直接対処する必要があります。

使用している DBMS については言及していませんが、DBMS のキャスト関数を利用することで回避できる場合があります。

SELECT... WHERE uuid = CAST(:uuid AS uuid_type)

これにより、文字列として DB に入っても、プッシュが発生するとネイティブ uuid として扱われます。

于 2012-09-03T03:48:20.970 に答える