mysql防注入pdo_PDO参数化查询prepare() php防SQL注入

PDO通过prepare()方法实现参数化查询,有效防止SQL注入。prepare()返回的PDOStatement对象可在execute()前绑定参数,如使用bindValue()或bindParam()。bindValue()接受参数位置、值和类型,支持不同类型如PDO::PARAM_INT、PDO::PARAM_STR等。execute()方法也可进行参数替换,但所有值默认为字符串类型。
摘要由CSDN通过智能技术生成

PDO中参数化查询主要用到prepare()方法,然后这个方法会返回一个PDOStatement对象,也就SQL声明(不知道怎么翻译),此时SQL语句只是被编译,但并未执行,调用PDOStatement中方法后会执行SQL语句,如下示例:

$sm = $db->prepare('SELECT login_oid FROM logined WHERE user_id=:user_id;');

$sm->bindValue(':user_id', $user_id, PDO::PARAM_INT);

$sm -> execute();

在execute()执行前,就可以调用bindValue()或者bindParam()方法替换之前准备的SQL语句中的你指定参数了,在SQL语句中指定参数有两种方式:':name’和’?’,上面代码中的用的是前一种,后一种的方式是:

$sm = $db->prepare('SELECT * FROM fruit WHERE calories < ?;');

$sm->bindValue(1, $calories, PDO::PARAM_INT);

$sm->execute();

bindValue()有三个参数,第一个指定要替换掉SQL语句中哪一个参数,第二个指定替换后的值,第三个指定值的类型,类型对应如下:

PDO::PARAM_BOOL

布尔类型

PDO::PARAM_NULL

NULL类型

PDO::PARAM_INT

整数类型

PDO::PARAM_STR

字符串类型如 CHAR, VARCHAR, string

PDO::PARAM_LOB

资源类大对象,如文件等

PDO::PARAM_STMT

不知道

PDO::PARAM_INPUT_OUTPUT

这个好像是扩展类型

里面没有提供实数类型,这个很诧异.

再说说execute()这个方法,它本身也可以做参数替换,但是它会把所有值的类型都变成字符串类型,如下

$sm = $db->prepare('SELECT * FROM fruit WHERE calories < ?;');

$sm->execute(array($calories));

多参数替换如下

$sm = $db->prepare('SELECT * FROM fruit WHERE calories < ?, id < ?;');

$sm->execute(array($calories, $user_id));

http://my.oschina.net/cers/blog/41739?fromerr=ezofpZnY

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值