【问题标题】:Fatal error: Uncaught Error: Cannot pass parameter 2 by reference PDO致命错误:未捕获错误:无法通过引用 PDO 传递参数 2
【发布时间】:2021-03-31 12:36:58
【问题描述】:

我在 PDO 中尝试使用 LIKE 进行查询,但是在这部分代码中出现以下错误:致命错误:未捕获错误:无法通过引用 PDO 传递参数 2。我该如何解决?

function buscador($DB,$categoria_id,$buscado){
    $productos = NULL;
    $sql = "SELECT * from producto WHERE categoria_id = ? LIKE ?";
    $stmt = $DB->prepare($sql);
    //$params = [$categoria_id,':keywords', '%' . $buscado . '%'];
    $stmt->bindParam(1,$categoria_id,PDO::PARAM_STR);
    $stmt->bindParam(2,':keywords', '%' . $buscado . '%',PDO::PARAM_STR);
    $stmt->execute();
    $productos = $stmt->fetchAll();

    return $productos;
}

【问题讨论】:

  • 只是说,您缺少要在WHERE categoria_id = ? LIKE ?中进行LIKE操作的列
  • 这里你没有正确传递参数:$stmt->bindParam(2,':keywords', '%' . $buscado . '%',PDO::PARAM_STR);(注意你有 4 个,不像第一个绑定中的 3 个)。此外,您的查询似乎不正确。哪一列应该使用LIKE
  • 应该使用like的列是$ searched @El_Vanja
  • $sql = "SELECT * from producto WHERE categoria_id = ? AND SOMECOLUMN LIKE ?";
  • 哦,是的,谢谢,如果我更改此功能会给我同样的错误@RiggsFolly

标签: php model-view-controller pdo sql-like


【解决方案1】:

bindParam 的第二个参数是通过引用传递的,因此不能是文字,它必须是变量。

您在我修复的查询语法中也有错误,虽然我不知道要使用的列名,请在尝试使用此代码之前更改它。

function buscador($DB,$categoria_id,$buscado){
    $productos = NULL;
    $sql = "SELECT * from producto WHERE categoria_id = ? AND othercol LIKE ?";
    $stmt = $DB->prepare($sql);

    $p2 = '%' . $buscado . '%';

    $stmt->bindParam(1,$categoria_id,PDO::PARAM_STR);
    $stmt->bindParam(2,$p2,PDO::PARAM_STR);
    $stmt->execute();
    $productos = $stmt->fetchAll();

    return $productos;
}

【讨论】:

    猜你喜欢
    • 2013-03-07
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2017-07-24
    • 2012-11-04
    • 2018-01-21
    • 2019-11-09
    相关资源
    最近更新 更多