PDO预处理
Posted t-young1201
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO预处理相关的知识,希望对你有一定的参考价值。
1.参数以?替代
<?php header(‘content-type:text/html;charset=utf-8‘); $dsn=‘mysql:host=localhost;dbname=test‘; $pdo=new PDO($dsn,‘root‘,‘‘); $pdo->exec(‘set names utf8‘); $sql=‘SELECT * FROM users id>?‘; //参数以 ? 替代 $stmt=$pdo->prepare($sql); //创建预编译对象 $id=2; $stmt->bindParam(1,$id); //参数编号,具体值 //$stmt->bindValue(1,2); //不需要提前赋值 直接传参数 $stmt->execute(); //执行代码 $data=$stmt->fetchAll(PDO::FETCH_ASSOC); //获取结果集 类型为关联数组 var_dump($data); $pdo=null; ?>
2.参数以:name替代。推荐,更加便利。
<?php header(‘content-type:text/html;charset=utf-8‘); $dsn=‘mysql:host=localhost;dbname=test‘; $pdo=new PDO($dsn,‘root‘,‘‘); $pdo->exec(‘set names utf8‘); $sql=‘SELECT * FROM users id>:id‘; //参数以 :name 替代 $stmt=$pdo->prepare($sql); //创建预编译对象 $id=2; $stmt->bindParam(":id",$id); //参数编号,具体值 $stmt->execute(); //执行代码 $data=$stmt->fetchAll(PDO::FETCH_ASSOC); //获取结果集 类型为关联数组 var_dump($data); $pdo=null; ?>
对于MySqli预处理,PDO执行查询语句时,不需要绑定结果集,直接使用fetch()或者fetchAll()
PDO::FETCH_ASSOC 从结果集中获取以列名为索引的关联数组。
PDO::FETCH_NUM 从结果集中获取一个以列在行中的数值偏移量为索引的值数组。
PDO::FETCH_BOTH 这是默认值,包含上面两种数组。
PDO的预处理方式可以防范常见的SQL注入
以上是关于PDO预处理的主要内容,如果未能解决你的问题,请参考以下文章
我如何使用 pdo->prefer 在此代码中处理 sql 注入?