【问题标题】:PHP LIKE query keeps turning up emptyPHP LIKE 查询一直为空
【发布时间】:2013-06-13 21:12:37
【问题描述】:

由于某种原因,我的 PHP PDO sql 搜索没有出现任何结果。我正在尝试在我的网站中实现某种搜索引擎,但我似乎什么也得不到。到目前为止,我一直在尝试一堆不同的解决方案,但即使给出了完全正确的参数,搜索仍然是空的。 $find 变量由用户输入,$field 变量是一个下拉列表,用户可以从中选择要搜索的内容,它返回的值等于数据库中的列名。

            $find = strtoupper($_POST['find']);
            $find = "%" . $find . "%";
            $field = $_POST['field'];

            $qry = $conn->prepare("SELECT * FROM \"MovieDB\" WHERE upper(:field) LIKE :find%");
            $qry->bindParam(':find', $find, PDO::PARAM_STR, 16);
            $qry->bindParam(':field',$field, PDO::PARAM_STR,16);
            $qry->execute();
            $results = $qry->fetchAll();

【问题讨论】:

  • 查询中有错字? :find%<<<--
  • 试试upper(:field) LIKE :find(没有尾随%)。百分比由参数$find 绑定。
  • 不,后面的 % 确实是一个错字,但删除它并不能解决问题。
  • 我认为您不能绑定字段(或表)名称。您可能需要将这些值直接注入到查询中。但一定要消毒! stackoverflow.com/questions/8314043/…
  • 耶!感谢showdev,您可以将其作为答案,因为它有效!一千谢谢你!

标签: php sql pdo sql-like


【解决方案1】:

PDO 不允许绑定字段或表名。

我建议将字段值直接注入到您的查询字符串中。
请务必对其进行清理以避免 SQL 注入!

$qry = $conn->prepare("SELECT * FROM \"MovieDB\"
                       WHERE upper(`".$field_santizied."`) LIKE :find");
$qry->bindParam(':find', $find, PDO::PARAM_STR, 16);

How to dynamically build queries with PDO

php.net 引用无法绑定表名:
http://us3.php.net/manual/en/book.pdo.php#69304

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 2012-10-05
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多