【问题标题】:PDO Suggest refine results different than wildcard symbolPDO 建议优化结果与通配符不同
【发布时间】:2015-07-31 20:52:47
【问题描述】:

我正在尝试使 PDO 查询不仅可以通过整个字符串进行搜索,还可以通过第一个字母或最后一个字母进行搜索。我的问题是我必须采取什么方法来实现这个目标。

我最初的想法是使用通配符和类似以下的东西:

SELECT * FROM idname WHERE field LIKE CONCAT('%', :field , '%')

但是这个选项对我来说不起作用,因为我收到了一个错误:

警告:在**中除以零

警告:第 111 行的 E:\xampp\htdocs\search-contact.php 中除以零

致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 E:\xampp\htdocs\dolche\admin\class\pagination.php:451 中的第 1 行的 'LIMIT 0, 30' 附近使用 堆栈跟踪:# 0 E:\xampp\htdocs\dolche\admin\class\pagination.php(451): PDOStatement->execute() #1 E:\xampp\htdocs\search-contact.php(125): 分页->execute( ) #2 {main} 在第 451 行的 E:\xampp\htdocs\class\pagination.php 中抛出

我的代码广告如下:

try
{

$paginate = new pagination($page, 'SELECT * FROM idname WHERE field LIKE :field', $options);
            

}
catch(paginationException $e)
{
    echo $e;
    exit();
}

$paginate->bindValue(':field', $_POST['field'] , PDO::PARAM_STR);
$paginate->execute();

欢迎提出建议?

【问题讨论】:

  • 您的查询中缺少'。错字在这里,还是在你的真实代码中?另外......这个错误究竟来自哪里?任何地方都没有/ 用于除法。

标签: php mysql pdo


【解决方案1】:

使用 PDO 时,您必须将通配符放入参数中,因此它看起来像:

$paginate->bindValue(':field', '%'.$_POST['field'].'%' , PDO::PARAM_STR);

【讨论】:

  • 如果我像这样使用一个参数,它可以工作,但如果我有更多绑定值并且我也将它添加到它们,查询将显示所有内容,就像它是 SLECT *
  • 你没有说改变 SELECT *,你是想改变选择的内容还是 WHERE 子句中的内容?
  • 我的意思是如果我有这样的东西:SELECT * FROM idname WHERE field LIKE :field OR field2 LIKE :field2
  • 是的,那仍然是 SELECT * ,因为 SELECT * 表示所有列。当您使用 WHERE 时,您会受到行数的限制。
  • 实际问题已得到解答,但我将不得不继续调查,因为目标是拥有各种字段,无论您在哪个字段中输入内容都会显示结果。使用相同的通配符过滤。
猜你喜欢
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 2020-08-05
  • 2020-04-14
  • 1970-01-01
相关资源
最近更新 更多