在准备的语句中使用通配符 – MySQLi
我正在尝试运行以下查询,并且遇到了通配符问题。
function getStudents() { global $db; $users = array(); $query = $db->prepare("SELECT id, adminRights FROM users WHERE classes LIKE ? && adminRights='student'"); $query->bind_param('s', '%' . $this->className . '%'); $query->execute(); $query->bind_result($uid, $adminRights); while ($query->fetch()) { if (isset($adminRights[$this->className]) && $adminRights[$this->className] == 'student') $users[] = $uid; } $query->close(); return $users; }
我收到一个错误,指出:不能通过引用传递参数2。 我需要使用通配符的原因是列的数据包含序列化数组。 我想,如果有更简单的方法来处理这个问题,我该怎么办?
提前致谢!
您必须通过引用将parameter passing给bind_param()
,这意味着您必须传递一个variables (不是串联的string)。 虽然没有理由不能特意构造这样一个variables来传入:
$className = '%' . $this->className . '%'; $query->bind_param('s', $className);
另一种方法是:
SELECT id, adminRights FROM users WHERE classes LIKE CONCAT("%", ?, "%") && adminRights='student'
如果你有一个dynamic的结果绑定,只需要改变SQL查询,这是很方便的…
参数#2必须是一个参考,而不是一个值。 尝试
$param = '%' . $this->className . '%'; $query->bind_param('s', $param);
这是在C ++中发生的原因。 当你将一个值传递给一个需要参数的函数时,你需要一个variables(不是临时的)。 所以首先创build一个variables,然后传递它。
现有的答案不适合我,所以这是我使用的:
$sql = mysql_query("SELECT * FROM `products` WHERE `product_title` LIKE '$userInput%'") or die(mysq_error());
它一直工作。
只是最高的一切,我只是尝试最简单的forms,它的工作
$sql = "SELECT * FROM `products` WHERE `product_title` LIKE '%".$userInput."%'";
我希望这有帮助