2013-06-21 6 views
2

На основании информации здесь MySQL query String contains пытается создать PDO запрос с ?SELECT * FROM Таблица WHERE Column LIKE%?%

Экспериментировала со следующими

SELECT * FROM Table WHERE Column LIKE %?%

SELECT * FROM Table WHERE Column LIKE ?%

SELECT * FROM Table WHERE Column LIKE %?

Не hing работает. Get error

Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL ; проверьте руководство, которое соответствует вашему серверу MySQL версии для корректного синтаксиса использовать вблизи «% ...

Пробовал с SELECT * FROM Table WHERE Column LIKE ?, но это не для contains

Цель состоит в том, чтобы получить запрос, SELECT * FROM Table WHERE Column contains ?

Что является правильным pdo contains заявление для позиционных заполнителей (?)?

+1

вручную добавить и добавить% к значению перед передачей запросу в качестве аргумента. См. Пример # 6 второй части http://php.net/manual/en/pdo.prepared-statements.php –

ответ

5

попробовать это конкатенация значения в строке с помощью PHP,

$value = "valueHere"; 
$passThis = "%" . $value . "%"; 
// other pdo codes... 
$stmt = $dbh->prepare("SELECT * FROM Table WHERE Column LIKE ?"); 
$stmt->bindParam(1, $passThis); 
// other pdo codes... 
+1

Это только правильное решение до сих пор –

1

после как добавить котировки. например: - like '%?%'

т.е:

SELECT * FROM table_name WHERE column_name like '%field_name%'; 
+0

'?'является заполнителем для переданного параметра, он не будет работать в кавычках. –

0

Если вы хотели бы использовать подготовленные заявления, то посмотрите на http://php.net/manual/de/pdo.prepared-statements.php.

SELECT * FROM REGISTRY where name LIKE '%?%' 
+0

http://php.net/manual/en/pdo.prepared-statements.php Пример # 6 Недопустимое использование заполнителя –

1

Я думаю подстановочный stament должен быть в одинарных кавычках, например;

SELECT * FROM Table WHERE Column LIKE '%?%'; 

Это возвращает любую запись, которая содержит строку, переданную в любом месте в пределах конкретного поля столбца

данные

Колонка, которая начинается с «бером», например,

SELECT * FROM Table WHERE Column LIKE 'ber%'; 

Надеется, что это помогает

+0

'?' Является заполнителем для переданного параметра, он выиграл Не работайте в кавычках. –

+0

Я ожидал, что pdo будет гибким, кажется, что pdo привяжет ваши руки к каждому запросу. ну цена, которую вы платите, чтобы быть конструктивной, я думаю ... – WattoWatto

1

Либо введите % символов до и после вашего параметра, прежде чем передавать его в запрос или

SELECT * FROM Table WHERE Column LIKE '%' + ? + '%' 

SELECT * FROM Table WHERE Column LIKE ? + '%' 

SELECT * FROM Table WHERE Column LIKE '%' + ? 

Хотя это не удастся, если? имеет значение null, потому что concatenate будет давать null. вы можете использовать coalesce

SELECT * FROM Table WHERE Column LIKE '%' + Coalesce(?,'') + '%' 

SELECT * FROM Table WHERE Column LIKE Coalesce(?,'') + '%' 

SELECT * FROM Table WHERE Column LIKE '%' + Coalesce(?,'') 
Смежные вопросы