一个关于单引号和null和大坑

博客讲述了作者在工作中遇到的日志脚本运行异常的问题,问题源于将null作为字符串赋值给PHP变量,而非NULL类型。在SQL语句参数绑定的修改后,原本的逻辑错误被放大,导致部分脚本出现问题。作者通过查看历史代码发现,SQL语句从直接插入变为参数绑定可能是问题的源头,强调了细节和理解原有逻辑的重要性。
摘要由CSDN通过智能技术生成

今天早上在公司上班的时候,突然同事在内部群上说有几个跑日志的脚本没有正常运行,找了各种原因都没找到问题,后天来发现是日志相关的配置在数据库的一个字段有问题,原定的逻辑是要存NULL,而数据库中则是null,乍一看,似乎并无区别,然而两者执行情况完全不同,null本身只是一个字符串变量,在逻辑上与NULL(空)完全不同,查找代码,发现原来是php变量有误,在空的情况下本该赋值null,结果写成了'null',被当成了一个单纯的字符串变量。

原因找到了,但更令人困惑的还在后面,按理说如果是代码逻辑问题的话,那么后台应该始终存在问题才是,为什么只有个别最近几天修改过的脚本会出问题呢,这就证明是最近某次修改中改变了代码逻辑导致的,于是开始找之前的历史代码(svn是个好东西),发现在空变量赋值上代码是没有更改过的,而变过的是sql语句,之前采用的是直接的insert语句进行操作,而就在前几天为了提高变量的安全性,防止注入和兼容特殊符号,sql语句被我改成了参数绑定的形式进行执行,那么这个

变动有什么问题吗,还真的有,对于:

$a = 'null';
$sql = "INSERT INTO xxx (`a`) VALUES ('$a')";
正常来说如果这样写的话,那么sql最终插入的就会是一个字符串null,然而真实的后台代码是
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值