请看一下PHP代码:
$val = $_POST['name'];
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT id, name, email FROM some_table WHERE name LIKE ?%");
$stmt->bind_param('s', $val);
$stmt->execute();
当我运行此查询时;我收到以下错误:警告:mysqli_stmt::bind_param():无效的对象或资源mysqli_stmt
这是怎么回事?
更改如下:
$val = $_POST['name'] . '%';
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT id, name, email FROM some_table WHERE name LIKE ?");
$stmt->bind_param('s', $val);
$stmt->execute();
基本上,准备好的 stmt 应该仍然只有占位符 '?',而你的变量末尾应该有通配符 '%'
问题是?
应该保留为 SQL 表达式中的占位符,或者 - 再次作为占位符,在 SQL 函数中使用。因此,您在这里有两个选择:只需将%
添加到提供的值,如下所示:
$val = $_POST['name'] . '%';
$stmt->prepare("SELECT id, name, email FROM some_table
WHERE name LIKE ?");
$stmt->bind_param('s', $val);
。或者保留该值,改为修改 SQL:
$stmt->prepare("SELECT id, name, email FROM some_table
WHERE name LIKE CONCAT(?, '%')");
$stmt->bind_param('s', $val);