44

PDOにLIKEを実装する際に問題が発生しています

私はこのクエリを持っています:

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

を確認したところ$var1$var2検索したい両方の単語が含まれています。クエリの一部が機能するため、PDOは正常SELECT INSERTに機能しています。これは、PDOに慣れていないためですLIKE

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

4

5 に答える 5

90

クエリではなく、に%記号を含める必要があります。$params

$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"%'、プリペアドステートメントがすでに引用されている文字列内で値を引用しているため、のようなものが表示されます。

于 2012-06-20T10:06:14.260 に答える
8

以下を使用するだけです。

$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)) { ... }
于 2017-07-03T21:01:27.047 に答える
6

いいえ、プレースホルダーの準備を引用する必要はありません。また、変数内に%マークを含めます。

LIKE ?

そして変数で:%string%

于 2012-06-20T10:04:34.307 に答える
4
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
$params = array("%$var1%", "%$var2%");
$stmt = $handle->prepare($query);
$stmt->execute($params);
于 2012-06-20T10:06:27.970 に答える
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));

それがうまくいくことを願っています。

于 2012-06-20T10:12:35.113 に答える