php
  • mysql
  • 2015-04-30 49 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中使用查询交易时会创建一个字符串\"

    相关问题