2016-05-09 10 views
0

PHPのいくつかのMySQLクエリをPDOプリペアドステートメントクエリに変換しています。PDOプリペアドステートメント(%とconcat)

ほとんどのクエリは十分に簡単ですが、私は、クエリのカップルに遭遇していると私は彼らが私が変換しています定期的なクエリで

をどのように見えるべきかわからない:

where field ='$type' 

where field =:type 

と変更

$results->execute(); 

$ results-> execute(array( 'type' => $ type));

通常シナリオ1

変数となり、それらを変換する:タイプのクエリではなく、%で、それはそこになるん:タイプ%または:型 '%'

where field like '$type%' 

シナリオ2

とき連結使用で

concat(uuid(),'-$id') 

これはどのように処理されるのですか?変数の前に - がある場合はどうすれば処理できますか?

ご協力いただければ幸いです。

$smt->bindParam(":type", $type . '%' , PDO::PARAM_STRING); 

Scenarion 2:scenarion 1あなたはシンプルなもの

$pdo = new PDO("mysql:host=localhost;dbname=database;","root",""); 
$smt = $pdo->prepare("...... WHERE col=:type"); 

Scenarion 1と同じ操作を行う必要があるでは

答えて

3

理解が必要なのは、a placeholder have to represent a complete data literal onlyです。

そしてこうしてあなたのコードは次のようになります。

シナリオ1

は、PHPでのワイルドカード文字を検索文字列を作成します

$type = "$type%"; 

、その後、あなたはそれを通常の方法をバインドすることができます。

シナリオ2

ただ、CONCAT()のための1つの以上の引数を追加します。

concat(uuid(),'-', :id) 
+0

シナリオ#1のためにバインディングと 'CONCAT'を使うこともできます...' WHERE field LIKE CONCAT(:type、 '%') ' – Phil

-2

その後

$smt->bindParam(":type", concat(uuid(),"-$id") , PDO::PARAM_STRING); 

をあなただけ実行してみませんかあなた自身のもの:

$smt->execute(); 
+1

このコードは –

+0

を動作しませんが、あなたはなぜしてください説明することができますか? –

+2

@VasilShaddixシナリオ1では、 'bindParam'は変数(値ではありません)を想定しています。あなたのシナリオ2では、PHPに 'concat()'または 'uuid()'と呼ばれる組込み関数はありません。 – Mikey

関連する問題