1

PDO bindValue を使用して、データベースから用語を検索しています。私の構文はすべて間違っていますか?思うような結果が得られない

$term = $_GET['s'];
$s_pdo = $dbh->prepare("SELECT * FROM table WHERE value = ':search'");
$s_pdo -> bindValue(':search',"%".$term."%",PDO::PARAM_STR);
$s_pdo -> execute();

while($s_row = $s_pdo->fetchAll(PDO::FETCH_ASSOC)){
    echo $s_row['value'];
}

誰かがここで何か間違っていると思いますか? 私のmysqlには値があります。検索機能が機能するかどうかをテストするために、mysqlで正確に一致しています。

ありがとう!

4

2 に答える 2

2

% を bindValue 部分から削除してみてください..:

$s_pdo = $dbh->prepare("SELECT * FROM table WHERE value = :search");
$s_pdo -> bindValue(':search',$term,PDO::PARAM_STR);

または、LIKE を使用して % を残すことができます:

$s_pdo = $dbh->prepare("SELECT * FROM table WHERE value LIKE :search");
$s_pdo -> bindValue(':search',"%".$term."%",PDO::PARAM_STR);
于 2012-07-04T20:39:32.707 に答える
1

準備されたプレースホルダーを引用する必要はありません。また、を使用する場合は、準備アクションの代わりに%term%を使用する必要があります。LIKE=

$term = $_GET['s'];
$s_pdo = $dbh->prepare("SELECT * FROM table WHERE value LIKE :search");
$s_pdo -> bindValue(':search',"%".$term."%",PDO::PARAM_STR);
$s_pdo -> execute();

while($s_row = $s_pdo->fetchAll(PDO::FETCH_ASSOC)){
    echo $s_row['value'];
}

また、次回は、エラーデバッグを改善するために、メソッドのPDO::ERRMODE_EXCEPTION使用を有効にします。PDO::setAttribute()

于 2012-07-04T20:06:05.523 に答える