команда sql, почему она показывает ошибку? - PullRequest
1 голос
/ 31 октября 2011
$categories_query ="SELECT p.products_id 
,  p.products_quantity
, p.products_price 
, p.products_status 
,p.products_image
, pd.products_name

FROM products_description AS pd
INNER JOIN products AS p
ON p.products_id = pd.products_id
WHERE  p.products_status = 1 and p.products_id <> $pid and pd.products_name LIKE CONCAT(LEFT('$products_name',10),'%')";

некоторые страницы работают нормально, даже если нет относительных элементов.но когда $products_name равно A Bug's Life "Multi Pak" Special 2003 Collectors Edition.это показывает ошибку:

1064 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 's Life "Multi Pak" Special 2003 Collectors Edition',10),'%')' at line 11
in:
[SELECT p.products_id...

почему?и как это исправить?

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

Вам необходимо использовать mysql_real_escape_string () для $ product name. «» является причиной этой ошибки, и mysql_real_escape_string () исправит это. Вы должны всегда фильтровать все переменные перед отправкой их в mysql, в противном случае вы рискуете закачать MySQL через вредоносный SQL-код. mysql_real_escape_string () на php.net

1 голос
/ 31 октября 2011

Пример значения $ products_name содержит символ ', поэтому запрос sql испортился.

На данный момент часть вашего запроса будет выглядеть примерно так

... (ЛЕВЫЙ ('Bug's Life "Multi Pak", специальное коллекционное издание 2003 года ", 10) ...

Обратите внимание, что 'между g и s "заканчивается" первым апострофом и остальной частью $ products_name не является строковым значением в выполненном запросе.

Вместо этого вы должны использовать подготовленные заявления. Вы также должны использовать Google «SQL инъекция» для уязвимостей вашего текущего кода.

РЕДАКТИРОВАТЬ: вы можете использовать либо

Я бы лично предпочел PDO. По причинам см. mysqli или PDO - каковы плюсы и минусы? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...