Я пытаюсь сделать подготовленный оператор для запроса LIKE, используя расширение mysqli php. Но независимо от того, что я пытаюсь, я всегда получаю эту ошибку:
Fatal error: Problem preparing query (SELECT f.*,r.slug FROM `foods` AS f INNER JOIN `resturants` AS r ON f.`rest_id` = r.`rest_id` WHERE f.`name` LIKE CONCAT('%',"f", '%')) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''%',"f", '%')' at line 4 in /path/to/class.mysqli.php on line 462
Я пробовал следующие запросы безрезультатно:
( $s
будет моей строкой для поиска.)
SELECT f.*,r.slug FROM `foods` AS f INNER JOIN `resturants` AS r ON f.`rest_id` = r.`rest_id` WHERE f.`name` LIKE '%?%' SELECT f.*,r.slug FROM `foods` AS f INNER JOIN `resturants` AS r ON f.`rest_id` = r.`rest_id` WHERE f.`name` LIKE CONCAT('%', ?, '%') SELECT f.*,r.slug FROM `foods` AS f INNER JOIN `resturants` AS r ON f.`rest_id` = r.`rest_id` WHERE f.`name` LIKE CONCAT('%', {$s}, '%') SELECT f.*,r.slug FROM `foods` AS f INNER JOIN `resturants` AS r ON f.`rest_id` = r.`rest_id` WHERE f.`name` LIKE '%{$s}%'
Даже:
sprintf("SELECT f.*,r.slug FROM `foods` AS f INNER JOIN `resturants` AS r ON f.`rest_id` = r.`rest_id` WHERE f.`name` LIKE '%%%s%%'", $s)
Помогите мне, пожалуйста, я расстроен.
Я бы переместил выражение после LIKE в переменную:
$param = '%somestring%'; $sql = "SELECT f.*,r.slug FROM `foods` AS f INNER JOIN `resturants` AS r ON f.`rest_id` = r.`rest_id` WHERE f.`name` LIKE ?"
ОБНОВИТЬ:
Может быть, это поможет
-- test.sql CREATE TABLE supportContacts ( id int auto_increment primary key, type varchar(20), details varchar(30) ); INSERT INTO supportContacts (type, details) VALUES ('Email', 'admin@sqlfiddle.com'), ('Twitter', '@sqlfiddle'); <?php // test.php $mysqli = new mysqli("localhost", "root", "root", "test"); $sql = 'SELECT type FROM supportContacts WHERE type LIKE ?'; // here is only ?, no % $stmt = $mysqli->prepare($sql); $type = 'E%'; // and here you can put % sign $stmt->bind_param('s', $type); $stmt->execute(); $stmt->bind_result($result); $stmt->fetch(); var_dump($result);
Ваш %
необходимо заключить в кавычки.