bind_param()PHP MySQLi中的致命错误

时间:2017-08-16 19:36:12

标签: php database mysqli

所以我知道这个错误/问题已在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编码器。

非常感谢帮助!

4 个答案:

答案 0 :(得分:1)

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

在查询中,您使用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);

答案 1 :(得分:1)

不完全确定您要对+做些什么,但如果您想要'%$search%'则:

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

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

答案 2 :(得分:0)

你将通配符放入绑定本身并使用PHP连接运算符.

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

答案 3 :(得分:0)

其他答案已经显示了如何修复它,但只是为了明确说明你想知道的,你得到错误的原因

  

致命错误:在非对象

上调用成员函数bind_param()

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

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

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