Php MySQL中存储“\abc\def\fg.jpg”问题
我需要将文档的相对路径存储到MySQL表中。问题是,当我插入此表单的字符串时:Php MySQL中存储“\abc\def\fg.jpg”问题,php,mysql,Php,Mysql,我需要将文档的相对路径存储到MySQL表中。问题是,当我插入此表单的字符串时: $urlPath ='\abc\def\fg.jpg' 在相关列中,我得到的是,我去掉了所有的斜杠“\”,在所有文本前面有一个未知的符号。因此,MySQL表中的结果如下所示: '(weird symbol)abcdeffg.jpg' 正如你所看到的,这种数据是无用的。你知道怎么解决这个问题吗 编辑:我试过$urlPath=\\abc\\def\\fg.jpg和$urlPath='\\abc\\def\\fg.jp
$urlPath ='\abc\def\fg.jpg'
在相关列中,我得到的是,我去掉了所有的斜杠“\”,在所有文本前面有一个未知的符号。因此,MySQL表中的结果如下所示:
'(weird symbol)abcdeffg.jpg'
正如你所看到的,这种数据是无用的。你知道怎么解决这个问题吗
编辑:我试过$urlPath=\\abc\\def\\fg.jpg和$urlPath='\\abc\\def\\fg.jpg,但还是有点胡言乱语。试试这个
$urlPath ='\\abc\\def\\fg.jpg'
在插入/更新查询中使用此字符串之前,请使用mysql\u real\u escape\u字符串对字符串中的特殊字符进行转义
反斜杠是PHP和MySQL中的特殊字符,因此需要在PHP和MySQL这两个级别对其进行转义。对于许多编程和脚本语言,包括PHP,\字符是转义字符
您必须使用double\来转义它。如果您想在数据库中输入诸如“等”之类的符号,或在字符串中使用诸如$mystr=I can have\之类的符号,也可以这样做 您需要转义两次,首先是PHP,因为\字符有特殊含义: 从: 在前面指定文字反斜杠的步骤 单引号,或在 绳子,加倍\ 然后,您需要为MySQL再次转义它,因为文本字符串现在包含了对MySQL也有特殊意义的 召唤 MySQL的库函数 mysql\u real\u escape\u字符串,其中 将反斜杠前置到以下内容 字符:\x00、\n、\r、\、'和 \x1a 如果您不想依赖MySQL,可以使用: 返回带反斜杠的字符串 在需要删除的字符之前 在数据库查询等中引用 字符为单引号“, 双引号、反斜杠和 NUL为空字节 我的意思是,我希望代码即使没有打开任何MySQL连接也能正常工作 抱歉,这是不可能的:您确实需要一个连接来执行正确的转义,因为转义方法是特定于连接的: 在某些字符集中,0x27和0x5C字节'和\可能是多字节字符的一部分,在这种情况下,反斜杠转义将生成错误的结果,并可能实际引入SQL注入的可能性!因此,您必须知道连接的字符集,才能转义正确的字符,而不是字节 如果服务器正在使用配置选项NO_backslax_escape使其符合ANSI SQL,则反斜杠转义是错误的,不会防止SQL注入 因此,您确实需要mysql\u real\u escape\u字符串和连接对象来正确地转义字符串文字。这通常不是问题,因为mysql\u real\u escape\u string某物的正确时间正好是进入已执行查询的时刻。否则,不应该传递mysql转义字符串 如果您不使用/不支持ANSI选项,并且您确信您的数据库连接将始终使用单字节字符集,或者您确信永远不会出现非ASCII字符,那么您可以安全地改用addslashes,它不需要连接
但更好的方法是使用双引号,这样你就不必考虑这些东西。如果你尝试$urlPath='\\abc\\def\\fg.jpg',会发生什么?请注意单引号的使用-如果你尝试双引号,它就不会起作用。但它仍然不起作用,我正在Windows上运行。。。这有区别吗?我更喜欢纯PHP解决方案,而不是和MySQLpure PHP解决方案联系在一起的解决方案?mysql\u real\u escape\u string是一个php函数。对不起……我的意思是,我想要的代码即使没有打开任何mysql连接也能工作。在这里,您需要打开MySQL连接才能使用该函数
$urlPath ='\\abc\\def\\fg.jpg';
$databaseUrlPath = mysql_real_escape_string($urlPath);
$databaseUrlPath = addslashes($urlPath);