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而不是=prepare 操作为您完成!

$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_EXCEPTIONusingPDO::setAttribute()方法。

于 2012-07-04T20:06:05.523 回答