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

7y4bm7vi  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(327)

我得到这个错误:
警告:mysqli_stmt::bind_param():变量数与准备语句中的参数数不匹配
代码:

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

我正在尝试将用户输入输入到准备好的语句中。
此代码工作正常,但对sql注入不安全:

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

js4nwp541#

使用时 LIKE 在事先准备好的声明中,情况有点不同。你应该添加 % 在将参数绑定到语句之前。
尝试以下操作:

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

相关问题