PHP MySQLi中的bind_param()致命错误

PHP MySQLi中的bind_param()致命错误,php,database,mysqli,Php,Database,Mysqli,因此,我知道这个错误/问题已经被张贴/询问了很多次,但没有一个答案对我有帮助,我不断地发现这个错误: 致命错误:对非对象调用成员函数bind_param 以下是相关代码: $connect = new mysqli(connection info); $search = $_POST["search"]; $sql = $connect->prepare("SELECT name, seller FROM products

因此,我知道这个错误/问题已经被张贴/询问了很多次,但没有一个答案对我有帮助,我不断地发现这个错误:

致命错误:对非对象调用成员函数bind_param

以下是相关代码:
    $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程序员


非常感谢您的帮助

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

在查询中,使用CONCAT函数

$sql = $connect->prepare("SELECT name, seller FROM products
                          WHERE name LIKE CONCAT('%', ? , '%')");
$sql->bind_param("s", $search);
在查询之外,您可以使用bind_参数传递它,如果您决定执行精确搜索而不是通配符搜索,这是很好的

$sql = $connect->prepare("SELECT name, seller FROM products
                          WHERE name LIKE ?");
$sql->bind_param("s", '%'.$search.'%');
如果bind_参数不起作用,可以在语句之前添加通配符:

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

不完全确定要使用+,但如果要“%$search%”,请执行以下操作:


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


其他答案已经说明了如何修复它,但只是为了明确地说明它,以防您想知道错误的原因

致命错误:对非对象调用成员函数bind_param

由于SQL语句中的语法错误,对prepare的调用失败

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


如果您按照配置连接,使MySQL错误会引发PHP异常,那么当您尝试使用未成功准备的语句时,您将能够看到MySQL返回的特定错误,而不仅仅是一个看似无关的PHP错误。

PHP的连接器是。not+,您不需要在这样的字符串内部串联,除非您试图使用mysql CONCAT函数。@RiggsFolly,这是SQL中的一个函数。由于第二个参数是通过引用的,所以我不希望您的第二个示例起作用。你能验证一下吗?不幸的是,没有,但我可以添加一个附录…我没有尝试第二个例子,但第一个对我有效。非常感谢。为未来着名,谢谢
$search = '%'.$_POST["search"].'%';

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