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

时间:2018-12-12 08:21:08

标签: php mysql mysqli sql-injection

我是php的新手,这个问题可能有一个简单的解决方案,但出现此错误:

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

代码:

$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'] . "%'");

1 个答案:

答案 0 :(得分:1)

在准备好的语句中使用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();