mysqli bind_param 变量数与准备语句中的参数数不匹配

mysqli bind_param Number of variables doesn't match number of parameters in prepared statement

我收到这个错误:

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement

代码:

$stmt = $sql->prepare("SELECT name, site, message, `when` FROM messages WHERE message LIKE '%?%'");
$stmt->bind_param('s', $_GET['search']);
$stmt->execute();
$result = $stmt->get_result();

我正在尝试让用户输入准备好的语句。

此代码工作正常,但对 SQL 注入不安全:

$result = $sql->query("SELECT name, site, message, `when` FROM messages WHERE message LIKE '%" . $_GET['search'] . "%'");

在准备好的语句中使用 LIKE 时,有点不同。您应该将 % 添加到参数 之前 将其绑定到语句。

试试下面的方法:

$param = "%{$_GET['search']}%";
$stmt = $sql->prepare("SELECT name, site, message, `when` FROM messages WHERE message LIKE ?");
$stmt->bind_param('s', $param);
$stmt->execute();
$result = $stmt->get_result();