Я пытаюсь запустить следующий запрос, и у меня возникают проблемы с шаблоном.
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 по ссылке. Причина, по которой мне нужно использовать шаблон, заключается в том, что данные столбца содержат сериализованные массивы. Я думаю, если есть более простой способ справиться с этим, что я могу сделать?
Заранее спасибо!
Вы должны передать параметры bind_param()
по ссылке, что означает, что вам нужно передать одну переменную (а не конкатенированную строку). Нет никакой причины, по которой вы не можете сконструировать такую переменную, специально предназначенную для прохождения, хотя:
$className = '%' . $this->className . '%'; $query->bind_param('s', $className);
Другой способ сделать это:
SELECT id, adminRights FROM users WHERE classes LIKE CONCAT("%", ?, "%") && adminRights='student'
Это удобно в случае, если у вас есть динамическое связывание результатов и вы хотите изменить SQL-запрос …
Параметр №2 должен быть ссылкой, а не значением. Пытаться
$param = '%' . $this->className . '%'; $query->bind_param('s', $param);
Это та же самая причина, которая происходит в C ++. Когда вы передаете значение функции, которая ожидает, что аргумент является ссылкой, вам нужна переменная (не временная). Поэтому сначала создайте переменную, а затем передайте ее.
Существующие ответы не работали для меня, поэтому я использовал вместо этого:
$sql = mysql_query("SELECT * FROM `products` WHERE `product_title` LIKE '$userInput%'") or die(mysq_error());
И он работает все время.
и только для того, чтобы все это я просто попробовал простейшую форму, и это сработало
$sql = "SELECT * FROM `products` WHERE `product_title` LIKE '%".$userInput."%'";
надеюсь, это поможет