所以我知道这个错误/问题已在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编码器。
非常感谢帮助!
答案 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错误时您尝试使用未成功准备的声明。