PHP中的预处理语句错误

时间:2018-05-26 10:26:04

标签: php sql prepared-statement

我有以下使用PHP执行的SQL查询,$ q是一个带有字符串的变量。

$sql =$conn->prepare('SELECT * FROM namebase WHERE name LIKE "%?%"');
$sql->bind_param('s', $q);
$sql->execute();

执行时,我收到一条错误消息,

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in C:\xampp\htdocs\file\s.php on line 39

第39行是$sql->bind_param('s', $q);

导致此错误的原因是什么?我只将一个变量传递给查询。那为什么会显示此错误消息?

2 个答案:

答案 0 :(得分:2)

查看mysqli_stmt::bind_param方法文档页面上的评论,有人遇到了完全相同的问题:https://secure.php.net/manual/en/mysqli-stmt.bind-param.php#102048

  

我遇到了LIKE运算符的问题

     

此代码不起作用:

<?php
$test = $sql->prepare("SELECT name FROM names WHERE name LIKE %?%");
$test->bind_param("s", $myname);
?>
     

解决方案是:

<?php
$test = $sql->prepare("SELECT name FROM names WHERE name LIKE ?");
$param = "%" . $myname . "%";
$test->bind_param("s", $param);
?>

答案 1 :(得分:-1)

如果您有权访问数据库,我建议您创建一个存储过程。

然后创建如下:

getNames(
    IN nameVAR VARCHAR(256)
)

SELECT * FROM namebase WHERE name LIKE ‘%nameVAR%’;

然后在你的php中调用getName(?)而不是把你当前的语句