💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
[TOC] ## PDO的原理 本质上就是**编译一次,多次执行**。 PDO预处理语句(prepared statement)机制,是将一条SQL命令向数据库服务器发送一次(此时发送的参数不是实参,是占位符),以后参数发生变化,数据库服务器只需对命令的结构做一次分析就够了。 ## PDO的好处 ~~~ 预处理机制可以有效的防止SQL注入风险 ~~~ ## 使用PDO的必要条件 ~~~ 版本要php 5.3.6+以上 并在DSN字符串中执行charset. ~~~ ## PDO连接数据库 ``` $sdn = 'mysql:dbname=user;host=127.0.0.1;charset=utf8'; $user = 'root'; $password = 'root'; try { //连接mysql数据库,实例化对象 $pdo = new PDO($sdn,$user,$password); }catch (PDOException $e){ //设置报错 echo 'Connection failed: ' . $e->getMessage(); } ``` ## PDO用法 ``` 跟msqli用法一样 $sql = "select * from username"; $res = $pdo->query($sql); $arr = $res->fetchAll(); echo "<pre>"; var_dump($arr); ``` ## PDO预处理 ``` //设置sql语句,定义给变量 $sql = "select * from username where id>? and age>?"; //数据库去执行sql语句,定义给变量stat $stat = $pdo->prepare($sql); //设置ID为变量,并赋值,以次来设置查询条件的关键1 $id = 1; //设置age为变量,并赋值,以次来设置查询条件的关键2 $age = 10; //绑定一个PHP变量到用作预处理的SQL语句中的对应命名占位符或问号占位符 //将第一个问号符,设置变量 $stat->bindParam(1,$id); //将第二个问好符,设置变量 $stat->bindParam(2,$age); $stat->execute(); //获取sql所有记录 $array = $stat->fetchAll(); var_dump($array); ``` ## 数组传参示例 ``` $stmt = $conn->prepare("insert into categorylink (did,cid) values (:did,:cid)"); 准备语句 foreach ($row as $key => $value) { $arr = array( ':did' => intval($value['id']), ':cid' => $cid ); 参数数组 $result = $stmt->execute($arr); 执行语句 } ``` ## 绑定参数示例 ``` $stmt = $conn->prepare("insert into categorylink (did,cid) values (:did,:cid)"); 命名参数 $stmt = $conn->prepare("insert into categorylink (did,cid) values (?,?)"); ?参数 $stmt->bindParam(":did",'121'); $stmt->bindParam(":cid",'232'); 绑定命名参数 $stmt->bindParam("1",'121'); $stmt->bindParam("2",'232'); 绑定?参数 $stmt->execute(); 执行语句 ```