Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL中存储“\abc\def\fg.jpg”问题_Php_Mysql - Fatal编程技术网

Php MySQL中存储“\abc\def\fg.jpg”问题

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

我需要将文档的相对路径存储到MySQL表中。问题是,当我插入此表单的字符串时:

$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);