Intereting Posts

Использование REGEXP внутри подготовленного оператора mysqli в PHP

Я пытаюсь сделать простой процесс поиска с (noob) кодами, подобными этому:

$prep->prepare("SELECT * FROM details WHERE id REGEXP '?'"); $prep->bind_param("s", $search_query); 

Это дает мне предупреждение:

 Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement 

Я предполагаю, что это может быть потому, что знак вопроса также используется для RegExp (необязательный предыдущий символ).

Любая идея о том, как использовать REGEXP внутри подготовленных операторов (без противоречивых вопросительных знаков)?

Благодарю.

Solutions Collecting From Web of "Использование REGEXP внутри подготовленного оператора mysqli в PHP"

Вытащите одиночные кавычки вокруг ? , Ваш код должен читать:

 $prep->prepare("SELECT * FROM details WHERE id REGEXP ?"); $prep->bind_param("s", $search_query); 

Как сейчас, вы проходите в одном параметре, но ? в одинарных кавычках рассматривается как строка, а не маркер параметра.

Ответ Эд ответил правильно.

Однако, если вам нужны более сложные регулярные выражения, вы можете использовать CONCAT для создания выражения.

 // Target SQL // SELECT * FROM `table` WHERE `field` REGEXP "value1|value2|value3"; // Target Prepared Statement SQL // SELECT * FROM `table` WHERE `field` REGEXP ?|?|?; $sql = 'SELECT * FROM `table` ' . 'WHERE `field` REGEXP CONCAT(?, "|", ?, "|", ?)'; $bindings = [$value1, $value2, $value3]; $prepStmt = $db->prepare($sql); $prepStmt->execute($bindings);