【问题标题】:PDO + input term + mysqlPDO + 输入项 + mysql
【发布时间】:2012-07-05 07:08:12
【问题描述】:

我正在使用 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 中完全匹配以测试我的搜索功能是否有效。

谢谢!

【问题讨论】:

  • 尝试从 phpmyadmin 运行查询,看看它是否返回任何行

标签: php search pdo


【解决方案1】:

尝试从 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);

【讨论】:

    【解决方案2】:

    您不需要引用准备好的占位符。此外,当使用%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::setAttribute() 方法启用PDO::ERRMODE_EXCEPTION

    【讨论】:

    • 我把那些引文去掉了,但它仍然没有给我我想要的东西。你能用 errmode_exception 和 setAttribute() 做一个例子,我应该把它们放在 fetchAll() 中吗?
    • $s_pdo->setAttribute("PDO::ATTR_ERRMODE", "PDO::ERRMODE_EXCEPTION"); 在创建新的 PDO 对象之后
    猜你喜欢
    • 2017-12-18
    • 2015-07-05
    • 2016-11-17
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多