2013-03-05 2 views
-1

Я пытаюсь сделать подготовленный оператор для запроса LIKE с использованием расширения mysqli php. Но независимо от того, что я стараюсь, я всегда получаю эту ошибку:MySqli make statement error при использовании для LIKE

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) 

Помогите мне пожалуйста, я получаю разочарование.

+1

Hm, 'CONCAT ('%', ' % ') 'должен работать AFAIK ..... И после некоторого тестирования он фактически работает в MySQL (не проверял сам mysqli). Хотя ... вы используете ACTUAL 'mysqli' или издевались? Потому что '/ path/to/class.mysqli.php' меня смущает ... – Wrikken

+0

Это класс обертки. Но это в основном сводится к объекту mysqli. –

+0

Но _is_ это обертывание 'mysqii' или перенос чего-то еще? И ... Вероятно, вам нужно показать этот класс. – Wrikken

ответ

4

Я бы переместить выражение после 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 ?" 

UPDATE:

Может быть, это поможет

-- test.sql 
CREATE TABLE supportContacts (
    id int auto_increment primary key, 
    type varchar(20), 
    details varchar(30) 
); 

INSERT INTO supportContacts 
(type, details) 
VALUES 
('Email', '[email protected]'), 
('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); 
+0

Не уверен, что я понял, что вы имеете в виду! –

+0

Вместо LIKE '%?%' (Первая заявка sql) пишите LIKE? и в обязательных параметрах передайте свое значение с помощью «%». – PaulP

+0

По-прежнему ничего? – PaulP

0

Ваш % должен быть заключен в кавычки.

+0

Что вы подразумеваете под инкапсулированным? Вы имеете в виду отдельно? –

Смежные вопросы