【问题标题】:bindParam for a GET-value for LIKE in a PDO MySQL query用于 PDO MySQL 查询中 LIKE 的 GET 值的 bindParam
【发布时间】:2012-08-17 01:50:40
【问题描述】:

有什么方法可以转换

$term = $_GET['p'];
$stmt = $dbh->prepare("
    SELECT      *
    FROM        posts
    WHERE       heading LIKE '%$term%'
    OR          full_text LIKE '%$term%'
    LIMIT       0 , 30
");
$stmt->execute();
$answer = $stmt->fetch(PDO::FETCH_ASSOC);

进入类似的东西

$term = "'%" . $_GET['p'] . "%'";
$stmt = $dbh->prepare("
    SELECT      *
    FROM        posts
    WHERE       heading LIKE :term
    OR          full_text LIKE :term
    LIMIT       0 , 30
");
$stmt->bindParam(":term", $term);
$stmt->execute();
$answer = $stmt->fetch(PDO::FETCH_ASSOC);

这样我就可以在查询中使用bindParam(":term", $term); 而不是'%$term%'

我已经看过这些Using LIKE in bindParam for a MySQL PDO QueryMysql, PDO - Like statement not working using bindParam。但是对于我的问题,他们没有给我任何正确的答案。

【问题讨论】:

  • 很高兴你在问如何正确地逃避事情,而不是抓住第一个看起来可以工作并运行的东西。在将变量直接放入 SQL 时,请始终保持警惕。
  • 总是要保持安全,对吧? ;) @tadman

标签: mysql pdo get sqlbindparameter sql-like


【解决方案1】:

将通配符连接到 SQL 中的变量:

$stmt = $dbh->prepare("
    SELECT      *
    FROM        posts
    WHERE       heading   LIKE CONCAT('%', :term, '%')
    OR          full_text LIKE CONCAT('%', :term, '%')
    LIMIT       0 , 30
");
$stmt->bindParam(':term', $_GET['p']);
$stmt->execute();
$answer = $stmt->fetch(PDO::FETCH_ASSOC);

【讨论】:

  • 这正是我所需要的。谢谢!尽快接受答案:) @eggyal
【解决方案2】:

你只需要 %。不要使用'(简单的queto)

例如:

$term = "'%" . $_GET['p'] . "%'";
$stmt = $dbh->prepare("
    SELECT      *
    FROM        posts
    WHERE       heading LIKE :term
    OR          full_text LIKE :term
    LIMIT       0 , 30
");
$termWithQueto = "%".$term."%";
$stmt->bindParam(":term", $termWithQueto, PDO::PARAM_STR);
$stmt->execute();
$answer = $stmt->fetch(PDO::FETCH_ASSOC);

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 2012-06-15
    • 2023-03-26
    • 2015-05-31
    • 1970-01-01
    • 2012-08-04
    • 2010-12-19
    相关资源
    最近更新 更多