php安装教程详解 php防sql注入函数


php安装教程详解 php防sql注入函数

文章插图
今天这篇文章 , 我们来简单的学习一下 PDO 中的预处理语句以及事务的使用 , 它们都是在 PDO 对象下的操作 , 而且并不复杂 , 简单的应用都能很容易地实现 。只不过大部分情况下 , 大家都在使用框架 , 手写的机会非常少 。
预处理语句功能预处理语句就是准备好一个要执行的语句 , 然后返回一个 PDOStatement 对象 。一般我们会使用 PDOStatement 对象的 execute() 方法来执行这条语句 。为什么叫预处理呢?因为它可以让我们多次调用这条语句 , 并且可以通过占位符来替换语句中的字段条件 。相比直接使用 PDO 对象的 query() 或者 exec() 来说 , 预处理的效率更高 , 它可以让客户端/服务器缓存查询和元信息 。当然 , 更加重要的一点是 , 占位符的应用可以有效的防止基本的 SQL 注入攻击 , 我们不需要手动地给 SQL 语句添加引号 , 直接让预处理来解决这个问题 , 相信这一点是大家都学习过的知识 , 也是我们在面试时最常见到的问题之一 。
//使用:name形式创建一个只进游标的PDOStatement对象$stmt=$pdo->prepare("select*fromzyblog_test_userwhereusername=:username",[PDO::ATTR_CURSOR=>PDO::CURSOR_FWDONLY]);var_dump($stmt);//object(PDOStatement)#2(1){//["queryString"]=>//string(57)"select*fromzyblog_test_userwhereusername=:username"//}$stmt->execute([':username'=>'aaa']);$aUser=$stmt->fetchAll();$stmt->execute([':username'=>'bbb']);$bUser=$stmt->fetchAll();var_dump($aUser);//array(1){//[0]=>//array(8){//["id"]=>//string(1)"1"//[0]=>//string(1)"1"//["username"]=>//string(3)"aaa"//……var_dump($bUser);//array(1){//[0]=>//array(8){//["id"]=>//string(1)"2"//[0]=>//string(1)"2"//["username"]=>//string(3)"bbb"//……prepare() 方法的第一个参数就是我们需要执行的 SQL 语句 , 在这段代码中 , 我们使用的是 :xxx 形式的占位符 , 所以在调用 prepare() 方法返回的 PDOStatement 对象的 execute() 方法时 , 我们需要指定占位符的值 。在代码中 , 我们使用这一条 SQL 语句 , 通过替换不同的占位符内容 , 实现了两次查询 。
prepare() 方法的第二个参数是为返回的 PDOStatement 对象设置的属性 。常见用法是:设置 PDO::ATTR_CURSOR 为 PDO::CURSOR_SCROLL , 将得到可滚动的光标 。某些驱动有驱动级的选项 , 在 prepare 时就设置 。PDO::ATTR_CURSOR 是设置数据库游标的类型 , 而 PDO::CURSOR_FWDONLY 的意思是创建一个只进游标的 PDOStatement 对象 。此为默认的游标选项 , 因为此游标最快且是 PHP 中最常用的数据访问模式 。关于数据库游标的知识大家可以自行查阅相关的内容 。
此外 , PDOStatement 还可以通过 bindParam() 方法来绑定占位符数据 , 我们将在后面学习 PDOStatement 对象相关的文章中继续学习 。
接下来 , 我们再看一下使用 ? 号占位符来实现查询 , ? 号占位符在绑定的时候是以下标形式进行绑定的 。
//使用?形式创建一个只进游标的PDOStatement对象$stmt=$pdo->prepare("select*fromzyblog_test_userwhereusername=?",[PDO::ATTR_CURSOR=>PDO::CURSOR_FWDONLY]);$stmt->execute(['aaa']);$aUser=$stmt->fetchAll();var_dump($aUser);//array(1){//[0]=>//array(8){//["id"]=>//string(1)"1"//[0]=>//string(1)"1"//["username"]=>//string(3)"aaa"//……当然 , 这种预编译语句不仅限于查询语句 , 增、删、改都是可以的 , 而且也都是支持占位符的 。在 PHP中操作数据库的预处理语句 这篇文章中有详细的示例 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: