php
  • mysql
  • 2015-04-30 51 views 0 likes 
    0

    我從PHP運行這個確切的查詢中刪除斜槓:Mysql的似乎從字符串

    UPDATE commentedText SET title='§2.', content='<div class=\"pageParagraph\"><p>Test</p>\n</div>', last_changed='1430422172', image_banner_url='', active='', comments='[{"from":"0","to":"0","id":"1","CommentedText":"","comment":"New test with \"test\" :d"}]' WHERE id='5541d52beb2ea' AND appId='MyAppID' LIMIT 1 
    

    然而,當我讀到被更新(通過PHP或MySQL工作臺)行,斜線都不見了。例如見

    <div class=\"pageParagraph\"[..] 
    

    其保存到表作爲

    <div class="pageParagraph"[..] 
    

    爲什麼斜線消失?

    +0

    斜線用於轉義插入字符。要插入文字斜槓,您需要將它們轉義\ \這就是爲什麼您使用準備好的語句或至少使用'escape_string'函數。 – AbraCadaver

    +2

    因爲在執行查詢或使用準備好的語句(推薦)時沒有正確轉義字符串,它們會消失。參見[PDO](http://php.net/manual/en/pdo.prepared-statements.php)或[this for mysqli](http://php.net/manual/en/mysqli.quickstart。製備-statements.php)。如果你使用'mysql_ *'函數,一定要切換到其中一個。 – Mike

    回答

    1

    使用適當的轉義。應用諸如addslashes()之類的東西很容易被打敗。

    根據您的庫,mysql_real_escape_string(),mysqli_real_escape_string()還是最好的,prepared statements

    這些轉義方法不會修改原始數據,因此您不必擔心刪除渲染上的轉義字符。

    +0

    太棒了,我換成使用mysqli_real_escape_string,現在它適用於雙引號。但是,單引號仍然會給我帶來問題:您的SQL語法出錯;請檢查與您的MySQL服務器版本相對應的手冊,以便正確使用在'single \\'引號附近的語法?}}'WHERE id ='5541d52beb2ea'AND appId ='MyApp'LIMIT 1'at line 1 – Publicus

    2

    它們在連MySQL之前就消失了--PHP將雙斜線看作反斜槓。

    "\"" 
    

    創建一個字符串"

    要保持反斜線使用

    "\\\"" 
    

    第一轉義第二個,第三個逃脫的報價。

    Mysql也對字符串使用反斜槓轉義。所以要在查詢中使用它,你需要再次逃脫。

    "\\\\\"" 
    

    PHP的字符串將是\\"

    這在MySQL中使用查詢交易時會創建一個字符串\"

    相關問題