【问题标题】:bind_param() Fatal Error in PHP MySQLi [duplicate]PHP MySQLi中的bind_param()致命错误[重复]
【发布时间】:2017-08-16 19:36:11
【问题描述】:

所以我知道这个错误/问题已经在 SO 上发布/询问了很多,但是没有一个答案对我有帮助,我一直收到这个错误:

Fatal error: Call to a member function bind_param() on a non-object

以下是相关代码:

    $connect = new mysqli(connection info);

    $search = $_POST["search"];

    $sql = $connect->prepare("SELECT name, seller FROM products
                              WHERE name LIKE '%' + ? + '%';");
    $sql->bind_param("s", $search);


    ?>

我相信它与 like 子句有关,但我不确定。我是一个没有经验的 SQL 和 PHP 编码器。

非常感谢您的帮助!

【问题讨论】:

  • PHP 的连接符是 . 而不是 +
  • 而且你不需要像这样在字符串内部进行连接,除非你尝试使用 mysql CONCAT() 函数。
  • @RiggsFolly,这在 SQL 中。

标签: php database mysqli


【解决方案1】:

不确定你想用+ 做什么,但如果你想要'%$search%' 那么:

$search = '%'.$_POST["search"].'%';

$sql = $connect->prepare("SELECT name, seller FROM products
                          WHERE name LIKE ?");
$sql->bind_param("s", $search);

【讨论】:

    【解决方案2】:

    您有两个选择:在变量中或在查询中添加通配符。

    在查询中,使用 CONCAT 函数

    $sql = $connect->prepare("SELECT name, seller FROM products
                              WHERE name LIKE CONCAT('%', ? , '%')");
    $sql->bind_param("s", $search);
    

    在查询之外,您可以将它与 bind_param 一起传递,如果您决定要进行精确搜索而不是通配符搜索,这很好

    $sql = $connect->prepare("SELECT name, seller FROM products
                              WHERE name LIKE ?");
    $sql->bind_param("s", '%'.$search.'%');
    

    如果bind_param不起作用,可以在语句前加上通配符:

    $search = '%'.$search.'%';
    $sql->bind_param("s", $search);
    

    【讨论】:

    • 由于第二个参数是通过引用,我不希望您的第二个示例起作用。可以验证吗?
    • 很遗憾,没有,但我可以添加附录...
    • 我没有尝试过第二个例子,但第一个对我有用。谢谢!
    【解决方案3】:

    您像这样将通配符放入绑定本身并使用 PHP 连接运算符 .

    $sql = $connect->prepare("SELECT name, seller FROM products
                              WHERE name LIKE ?");
    $sql->bind_param("s", '%' . $search . '%');
    

    【讨论】:

      【解决方案4】:

      其他答案已经展示了如何解决它,但只是为了明确说明以防万一你想知道你得到错误的原因

      致命错误:在非对象上调用成员函数 bind_param()

      您对prepare 的调用是否因为您的 SQL 语句中的语法错误而失败。

      虽然您可以在其他一些数据库中使用+ 作为字符串连接运算符,但据我所知,在 MySQL 中它是严格的数学运算符。

      如果您按照these instructions 配置您的连接,以便 MySQL 错误会引发 PHP 异常,您将能够看到 MySQL 返回的特定错误,而不是在您尝试使用时收到看似无关的 PHP 错误未成功准备的语句。​​

      【讨论】:

      • 注意未来,谢谢
      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 2014-02-03
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多