Php mysqli bind_param变量数不';t匹配已准备语句中的参数数

Php mysqli bind_param变量数不';t匹配已准备语句中的参数数,php,mysql,mysqli,sql-injection,Php,Mysql,Mysqli,Sql Injection,我得到了这个错误: 警告:mysqli_stmt::bind_param():变量数与准备语句中的参数数不匹配 代码: 我正在尝试将用户输入输入到准备好的语句中 此代码工作正常,但对SQL注入不安全: $result = $sql->query("SELECT name, site, message, `when` FROM messages WHERE message LIKE '%" . $_GET['search'] . "%'"); 在预先准备好的语句中使用之类的时,会有一点不同

我得到了这个错误:

警告:mysqli_stmt::bind_param():变量数与准备语句中的参数数不匹配

代码:

我正在尝试将用户输入输入到准备好的语句中

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

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

在预先准备好的语句中使用
之类的
时,会有一点不同。在将参数绑定到语句之前,应将
%
添加到参数

请尝试以下操作:

$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();

$par=“%”$_获取['search']。“%”,$stmt->bind_param('s',$par)
使用参数占位符
时,不要将其放在字符串分隔符中。字符串中的问号算作普通问号字符。如果它是一个参数占位符,你怎么能在字符串中使用一个普通的问号呢?这能回答你的问题吗?就这样,谢谢!我会在几分钟内接受你的回答,因为我还不能接受。
$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();