2013-09-03 3 views
2

Я получаю следующую ошибку ниже, я полагаю, что ее частично выполняет цитата, которую я имею в строке вставки 5'10 - (178cm), в которой передается переменная $en['height']. Каков наилучший способ справиться с этой ошибкой?mySQL вставить синтаксическую ошибку с цитатой

Ошибка: У вас возникла ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом '10 - (178cm)», m_btype =„Не скажу“в строке 12

это MySQL вставки:

m_height = '".$en['height']."', 

стол накрыт как:

varchar(30) latin1_swedish_ci 
+5

Поздравляем, у вас есть потенциальная инъекция mysql. – kirilloid

+1

Я предполагаю, что вы либо используете устаревшие mysql_ * запросы, либо не используете параметризацию прямо в mysqli/PDO, так как вы не предоставляете остальную часть кода. Преобразуйте свой код, чтобы использовать PDO или mysqli, и привяжите параметры в запросе, чтобы позаботиться о котировках. – aynber

+4

@kirilloid: не является потенциальным, это подтверждено ... если не было проблемы с инъекцией, тогда '' 'в' 5'10' не будет вызывать синтаксическую ошибку. –

ответ

4

Ваш вопрос в том, что вы должны «уйти» строки перед вводом их в запросы SQL. Не делать этого позволит людям изменить ваш запрос, введя кавычки. Пример, если я ввожу следующую строку:

'; select * from users; -- 

Его можно выполнить SQL, который вы не планировали. Решение состоит в том, чтобы избежать:

m_height = '".mysql_real_escape_string($en['height'])."', 

Или еще лучше использовать более актуальные методы запроса MySQL, такие как PDO или MySQLi функций.

Редактировать Я также думаю, что у вас более общая синтаксическая ошибка. Попробуйте следующее:

m_height = "'".mysql_real_escape_string($en['height'])."'", 
+0

было бы безопасно делать что-то вроде этого 'foreach ($ _POST ['add'] как $ key => $ value) $ _POST ['add'] [$ key] = mysql_real_escape_string (stripslashes ($ value));' – acctman

+0

Да, это кажется мне хорошо. stripslashes необязательно в зависимости от того, включена ли опция магии кавычек в PHP. – beiller