2015-10-20 85 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都支持它們,它會讓生活變得容易一旦你得到了他們的hang 012 – 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()中的值。