thinkphp - TP里面如果这句话改成预处理的方式怎么改呢?

查看:109
本文介绍了thinkphp - TP里面如果这句话改成预处理的方式怎么改呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

$arr=array(
     'name'=>$name,
     'age'=>$age
     );
$z=$user->add($arr);

我试着改了一下 瞎写的 不对 插进去的是null

$z=$user->add("name=>'%s' and age=>'%s'",array($name,$age));

解决方案

我没用过TP,不过感觉你对预处理的理解不太对头。
事实上只要你不是sql语句,那么都会进行安全处理的,这也是数据库访问接口的特性,例如 PDO 是 exec('insert into table values(?,?)', [$param1, $param2]),这是PDO对象支持的,而不是TP提供的,它所做的只是转换为以上格式,而不是转换为 insert into table set column1 = $param1, column2 = $param2,这种格式就无法有效利用PDO的预处理功能了。
对于数据格式的问题,%s %f那种应该是TP应对查询做的扩展,其实一律写成%s也不影响结果,例如 id=1 和 id='1'没有任何区别。

至于insert/update的数据安全性与合法性问题应该用验证器提前检查。

简单来说,所谓的预处理其实就是为了防止数据中包含单/双引号引起语法错误或产生sql注入,并不包含任何检查、格式化的用途。

这篇关于thinkphp - TP里面如果这句话改成预处理的方式怎么改呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆