从php传过来的是字符串吗,字符串在传送过程中发生了变化

博客内容描述了在前端到后端数据传递过程中,字符串因特殊字符导致的问题。在插入数据库时,特殊字符未正确转义,影响了数据保存。解决方案是在PHP中使用addslashes()函数手动转义字符串,确保SQL语句的正确性。同时,提到JSON编码后可能也需要转义,以确保数据安全。
摘要由CSDN通过智能技术生成

字符串在传递过程中发生了变化

情况描述:

前端输入的内容是:;?9W/U\|"s6u|:M

然而传递到后端再保存到数据库时就成了:;?9W/U|"s6u|:M

这是为什么呢?

这是怎么回事呢?

1:我发现在insert到数据库之前都还是正确的

2:然后单独使用heidisql工具去更改这个值,它显示的sql语句是:

UPDATE`bitstorm_http_node`.`config_user_pwd`SET`Password`=';?9W/U\\|"s6u|:M'WHERE`Id`=14;

我们发现程序在insert操作之前,它在值中添加了转义付去转义特殊符号'\'

可以究竟为什么会转义?难道是字符串的单引号双引号在作祟吗?

如果把字符放在单引号'之间,除了单引号本身'之外的绝大多数字符会解释成和写在代码中一样的形式。

放在双引号之间的字符串支持插入替换(内嵌在字符串中的变量会被替换成其内容),而且也会替换转义字符,例如用换行符替换\n,用tab替换\t,\换成\\。同样,\|它会解释成|

如果把上面的PHP中的代码的sql置于单引号中,则会是无效的sql语句:

Invalid query

INSERT INTO `bitstorm_http_node`.`config_user_pwd` (`Id`, `Domain_Name`, `Username`, `Password`) VALUES (0, "mdc-mon-tg-zabvip01.ubisoft.onbe", "cheng.wang", ";?9W/U\|"s6u|:M");

解决办法:

在PHP中:并不是每一段被转义的数据都要插入数据库的,如果所有进入 PHP 的数据都被转义的话,那么会对程序的执行效率产生一定的影响,会产生性能问题。

在运行时调用转义函数(如 addslashes())更有效率。

所以很明显,这里插入数据库我们需要转义,所以在需要转义的地方调用addslashes()函数来手动转义即可

$pwd = addslashes($pwd);//加这行代码后保存到数据库就对了,OK,解决问题if($zabbixHelper==false){return $this->returnError("Invalid input: Can not login zabbix using this username and password.");

}$sql = "INSERT INTO `bitstorm_http_node`.`config_user_pwd` (`Id`, `Domain_Name`, `Username`, `Password`) VALUES (0, '" . $domainName . "', '" . $username . "', '" . $pwd . "');";$this->callSqlQuery($sql));

最后,在PHP中,有时候json编码后也需要转义:

$parameters = addslashes(json_encode($args));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值