2012-03-14 2 views
-4

Я использовал ниже код для проверки фамилия (с учетом регистра) от DB.Как я могу проверить имя с одинарными кавычками в SQL?

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'ravi' 

Его работа прекрасна. Но это не работает, когда имя, как показано ниже, я передаю эту фамилию, используя php variable ($ lname).

SELECT * FROM $table_name WHERE BINARY LastName LIKE '$last_name' 
SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O'Connor' 

Как это разрешить?

+0

Вам просто нужно избежать одиночной кавычки. – Lion

+0

У меня был аналогичный вопрос. Ответы на это могут пригодиться вам. http://stackoverflow.com/q/8807690/212940 – vascowhite

ответ

0

Когда вы создаете запрос в вашем PHP скрипт, используйте addslashes функцию на значение, которое вы ищете:

$query = "SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE '" . addslashes($name) . "'" 

Это экранировать все символы, которые нуждаются в ней и будет производить результат вы находясь в поиске.

Другим решением является использование двойных кавычек в запросе вместо одной цитаты:

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE "O'Connor" 

, но я думаю, что я предпочитаю первое решение

+0

Я передаю эту фамилию, используя переменную php ($ lname). SELECT * FROM $ table_name WHERE BINARY LastName LIKE '$ last_name' –

+1

@Ravichandran: вы также можете использовать addlashes при передаче переменной в первую очередь, то есть addslashes ($ lname) – hellsgate

2

Вам нужно бежать все одиночные кавычки с одной цитатой:

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O''Connor' 
0

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

2

это должно работать.

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O\'Connor' 

и PHP, конечно, у вас есть mysql_escape или все PDO подготовлены заявления, которые будут заботиться об этом автоматически, учитывая LIKE значение, которое вы используете привязан к переменной PHP.

+0

Я передаю эту фамилию, используя переменную php ($ lname). SELECT * FROM $ table_name WHERE BINARY LastName LIKE '$ last_name' –

+0

никогда не делайте этого !!! его рай для SQL-инъекций !!! каждая переменная PHP, используемая в вашей строке PHP SQL, должна быть передана по крайней мере через mysql_real_escape_string или если вы используете PDO, используйте подготовленные инструкции. – dweeves

-1
WHERE BINARY LastName LIKE "O'Connor" 

это работает для меня

I думаю, что \' может быть лучше, но обе работают

0

Вы должны избегать строки с mysql_real_escape_string()

если у вас включен magic_quotes_gpc (что вы должны знать, это плохая идея). Это означает, что строки, собранные из $ _GET, $ _POST и $ _COOKIES, сбрасываются для вас (т. Е. «O'Connor» -> «O \ Connor»).

После того, как вы сохраните данные и впоследствии получите их снова, строка, которую вы вернетесь из базы данных, не будет автоматически удалена для вас. Вы вернетесь «О'Коннор». Итак, вам нужно будет передать его через mysql_real_escape_string()

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