PHP编写SQL语句时$sql变量中两处反斜杠\有何作用
反斜杠作用说明
你贴的代码里的\"是HTML转义后的展示效果,实际PHP代码中对应写法为\",两个反斜杠都是PHP字符串的转义标记,作用如下:
- 这段代码里
$sql的赋值内容是用双引号包裹的PHP字符串,对PHP解析器来说,未被转义的双引号是字符串的边界标记,遇到就会判定当前字符串结束。 - 你要写入数据库的影片标题本身就包含双引号:
Star Wars (aka "A New Hope"),包裹A New Hope的两个双引号是需要原样传入SQL的内容,不是PHP字符串的边界。 - 如果不加反斜杠转义,直接在双引号包裹的PHP字符串里写这两个双引号,PHP解析到
aka后面的第一个双引号时,就会误判字符串已经结束,后面的内容会被识别为无效PHP代码,直接抛出语法错误。 - 反斜杠的作用就是告诉PHP解析器:紧跟在后面的这个双引号是字符串内容的一部分,不要当成边界符处理。转义用的反斜杠不会被拼接到最终的SQL语句里,实际传给MySQL执行的语句中,标题部分就是正常的
Star Wars (aka "A New Hope"),不会带多余的反斜杠。
// 实际运行的PHP代码写法 //do the SQL $sql = "UPDATE `starwars`.`Films` SET `Title` = 'Star Wars (aka \"A New Hope\")' WHERE `films`.`Episode` = 4"; $dosql = mysqli_query($connection, $sql);
补充:如果这段SQL用单引号包裹PHP字符串,内部的双引号就不需要加反斜杠转义,只需要转义字符串内部出现的单引号即可,这是PHP不同字符串定界符的解析规则差异。
内容的提问来源于stack exchange,提问作者Albert Gaytan
相关产品推荐
相关产品推荐

