2015-10-20 4 views
-2

Я передаю данные из AJAX на свой PHP. Я просто запускаю цикл for, чтобы выполнить мой запрос. Проблема с моими данными в том, что она содержит одинарную кавычку.Как избежать запроса php mysqli?

Я использую одинарную кавычку, чтобы заключить свои параметры в запрос. Запрос что-то вроде

INSERT INTO myTable (column1.column2) VALUES('value1', 'value2'), 
    ('value'1', 'value2'); 

Я хочу, чтобы избежать как

INSERT INTO myTable (column1.column2) VALUES('value1', 'value2'), 
    ('value\'1', 'value2'); 

Я просто попытался mysqli_real_Escape_String. Он возвращает что-то вроде

INSERT INTO myTable (column1.column2) VALUES(\'value1\', \'value2\'), 
    (\'value\'1\', \'value2\'); 

Ошибка выполнения запроса.

Я не думаю, что использование htmlspeciachars - правильный путь для этого.

Любые предложения?

+0

Я рекомендую вам использовать [PDO] (http://php.net/manual/fr/book.pdo.php) для доступа к БД в PHP. Если вы этого не сделаете, вы можете использовать [mysql_escape_string] (http://php.net/manual/fr/function.mysql-escape-string.php) –

+0

Использовать подготовленные операторы - оба mysqli и PDO поддерживают их, и это будет сделать жизнь soooo намного легче, как только вы их повесить – RamRaider

+0

Я не думаю, что могу использовать параметры. Поскольку число строк и количество столбцов динамическое. Я использую только mysqli_query –

ответ

1

Вы должны обязательно использовать подготовленные заявления. Они не такие хитрые.

Однако, если вы не собираетесь совершать этот прыжок, вам просто нужно использовать mysqli_real_escape_string должным образом.

Из полученного результата я предполагаю, что вы завернули весь запрос в функцию mysqli_real_escape_string. Однако вы должны просто обернуть значение в нем.

т.е.

"INSERT INTO myTable (column1, column2) VALUES('value1', 'value2'), 
    ('" . mysql_real_escape_string("value'1") . "', 'value2')"; 

То довольно надуманный способ делать вещи. Но идея такова: только оберните значение в mysqli_real_escape_string().

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