2012-06-20 13 views
27

でクエリLIKE実装:私はこのクエリを持っているPDO</p> <p>でLIKEを実装で問題を実行していますPDO

$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'"; 
$params = array($var1, $var2); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 

私は、彼らは私が検索したい語句の両方を含む$var1$var2をチェックしますPDOは私の質問のいくつかからうまくいきます。SELECTINSERT彼らは働いていますが、それは私がPDOのLIKEでここで慣れていないということだけです。

結果は返されません。私の$queryは構文的に正しいですか?

答えて

61

LIKE ? 

変数で

$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; 
$params = array("%$var1%", "%$var2%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 

あなたは、生成されたクエリで見たい場合前のコードでは、SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%'のようなものがあります。準備されたステートメントはすでに引用された文字列の中で値を引用しているためです。

+0

+1の説明ですが、生成されたクエリを見る方法はないと思います。 – Vignesh

+0

私の人生のためにこれを理解することができず、私はこれについてすべてを忘れてしまった。素晴らしい答え。ありがとう! – b3tac0d3

5

いいえ、プレースホルダの準備をする必要はありません。また、変数の中に%マークを含めてください。あなたがいないクエリで$params%兆候を、含める必要が%string%

+0

うーん、恩赦が、私はあなただけで示唆されているものを実装する方法は非常にわかりません。 –

+0

私はモバイルですが、できる限りのことを説明しようとします。私の編集を参照してください。 –

4
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; 
$params = array("%$var1%", "%$var2%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 
2

あなたは

例以下
$title = 'PHP%'; 
$author = 'Bobi%'; 
// query 
$sql = "SELECT * FROM books WHERE title like ? AND author like ? "; 
$q = $conn->prepare($sql); 
$q->execute(array($title,$author)); 

を見ることができるが、それは動作します願っています。

1

単純に次のようにします。

$query = "SELECT * FROM tbl WHERE address LIKE CONCAT('%', :var1, '%') 
      OR address LIKE CONCAT('%', :var2, '%')"; 

$ar_val = array(':var1'=>$var1, ':var2'=>$var2); 
if($sqlprep->execute($ar_val)) { ... } 
+0

バインドされた変数に%を直接追加するよりも時間がかかります。 – CristiC

関連する問題