19

このクエリでは

select wrd from tablename WHERE wrd LIKE '$partial%'

'$partial%'変数をPDOにバインドしようとしています。これが最後にどのように機能するかわからない%

それでしょうか

select wrd from tablename WHERE wrd LIKE ':partial%'

どこ:partialにバインドされています$partial="somet"

またはそれは

select wrd from tablename WHERE wrd LIKE ':partial'

どこ:partialにバインドされています$partial="somet%"

それともまったく違うものでしょうか?

4

7 に答える 7

37

あなたはまた言うことができます:

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')

MySQLの最後で文字列結合を行うためであり、この場合に特別な理由があるわけではありません。

探しているパーシャルwrd自体にパーセント文字またはアンダースコア文字(LIKE演算子にとって特別な意味があるため)またはバックスラッシュ(MySQLがLIKE演算子のエスケープの別のレイヤーとして使用する)を含めることができる場合は、少し注意が必要です。 、ANSI SQL標準による)。

うまくいけば、それはあなたに影響を与えませんが、あなたがそのケースを正しくする必要があるならば、ここに厄介な解決策があります:

$stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);
于 2010-04-27T15:12:39.550 に答える
17
$var = "partial%";
$stmt = $dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial");
$stmt->bindParam(":partial", $var);
$stmt->execute(); // or $stmt->execute(array(':partial' => $var)); without 
                  // first calling bindParam()
$rs = $stmt->fetchAll();

疑問符パラメータの使用:

$stmt = $dbh->prepare('select wrd from tablename WHERE wrd LIKE ?');
$stmt->execute(array('partial%'));
$rs = $stmt->fetchAll();

http://www.php.net/manual/en/pdo.prepare.php

于 2010-04-27T15:00:25.260 に答える
0

プリペアドステートメントの前にaddcslashesを使用できます。私はmysqlでテストしました。

$value = addcslashes($value, '%');
$stmt = $db->prepare('select * from products where description like ?');
$stmt->execute(["$value%"]);
于 2017-03-06T12:37:14.540 に答える
0

(@bobinceによって)受け入れられた答えは少し単純化できると思います。

これを次のように減らすと、パラメータでアンダースコアやパーセンテージなどを処理できますが、LIKEクエリを部分的な%と一致させることができます。

$stmt = $dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial");
$stmt->execute([":partial" => addcslashes($value, '_%') . "%"]);
$rows = $stmt->fetchAll();
于 2019-01-23T18:46:57.627 に答える
-1

以下のコードは、データベースの最初のキーワードのみを示しています。

"SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')"

データベースからすべてのキーワードを検索したい場合は、これを試してください

"SELECT wrd FROM tablename WHERE wrd LIKE :partial";
$stmt->execute(array(':partial'=>'%'.$YourVarHere.'%'));
于 2016-02-13T12:57:22.047 に答える
-2

これはあなたがそれをすべき方法です

bindValue(':partial', '%' . $_GET['partial'] . '%');

ありがとう、

Qwerty配列

于 2015-08-20T09:29:47.997 に答える
-4

誰がアンスウェアを書いたのか(karim79かもしれません):

$var ="partial%"
$stmt =$dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial")
$stmt->bindParam(":partial",$var)
$stmt->execute(); //or$stmt->execute(array(':partial'=>$var)); without 
                  // first calling bindParam()
$rs =$stmt->fetchAll();

疑問符パラメータの使用:

$stmt =$dbh->prepare('select wrd from tablename WHERE wrd LIKE ?');
$stmt->execute(array('partial%'));
$rs =$stmt->fetchAll();

彼に感謝します。コードを検索して多くの例を見ましたが、問題を解決できませんでした。今回は成功しました。コードの「疑問符パラメーターの使用:」セクションを使用しました。

他のヘルプについては、変数から値を取得する場合は、コードを次のように変更できます。

$stmt->execute(array($variable.'%'));

それ以外の

$stmt->execute(array('partial%'));

答えに「部分的」という単語が指定されており、変更できないためです。どうもありがとう。

于 2014-04-03T06:39:08.260 に答える