PDO进行sql语句预处理和操作结果集详细介绍(二)
<span style="font-size:18px;">一:预处理语句及其绑定参数执行insert try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有两种占位符号 * * ? 参数 --- 索引数组, 按索引顺序使用 * 名字参数 ----关联数组, 按名称使用,和顺序无关 */ $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(?, ?, ?, ?)"); //所有SQL都可执行 //准备好了一条语句,并入到服务器端,也已经编译过来了,就差为它分配数据过来 // $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(:name,:price, :num, :desn)"); //绑定名字参数 顺序可以不一致和名字对应即可 /* $stmt->bindParam(":name", $name); $stmt->bindParam(":num", $num); $stmt->bindParam(":desn", $desn); $stmt->bindParam(":price", $p); */ ////绑定 问好?参数---得按顺序绑定 $stmt->bindParam(1, $name, PDO::PARAM_STR);//第3个参数是数据类型可不用写,会自动找类型 $stmt->bindParam(3, $num, PDO::PARAM_INT); $stmt->bindParam(4, $desn, PDO::PARAM_STR); $stmt->bindParam(2, $p, PDO::PARAM_STR); $name="wwww1"; $num=101; $desn="hello1"; $p=34.51; if($stmt->execute()){ echo "执行成功"; echo "最后插入的ID:".$pdo->lastInsertId(); }else{ echo "执行失败!"; } //多次插入------------想执行多次。。。N次,传值即可 $name="wwww1"; $num=101; $desn="hello1"; $p=34.51; if($stmt->execute()){ echo "执行成功"; echo "最后插入的ID:".$pdo->lastInsertId(); }else{ echo "执行失败!"; } 二:预处理语句UPDATE try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有两种占位符号 * * ? 参数 --- 索引数组, 按索引顺序使用 * 名字参数 ----关联数组, 按名称使用,和顺序无关 */ //准备好了一条语句,并入到服务器端,也已经编译过来了,就差为它分配数据过来 //$stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(?, ?, ?, ?)"); //所有SQL都可执行 //update和insert一样 $stmt=$pdo->prepare("update shop set name=:name,num=:num,price=:price,desn=:desn where id=:id"); //所有SQL都可执行 //绑定名字参数 顺序可以不一致和名字对应即可 $stmt->bindParam(":name", $name); $stmt->bindParam(":num", $num); $stmt->bindParam(":desn", $desn); $stmt->bindParam(":price", $p);//变量名字随便写 $stmt->bindParam(":id", $id); $name="nnn"; $num=101; $desn="hello1"; $p=34.51; $id=108; if($stmt->execute()){ echo "执行成功"; //echo "最后插入的ID:".$pdo->lastInsertId(); }else{ echo "执行失败!"; } //接着传值执行第二次-----N次,这就是PDO预处理,只会编译一次SQL,其他想执行传值就可以 $name="mmm"; $num=101; $desn="hello1"; $p=34.51; $id=109; if($stmt->execute()){ echo "执行成功"; }else{ echo "执行失败!"; } 三:预处理插入多条 try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有两种占位符号 * * ? 参数 --- 索引数组, 按索引顺序使用 * 名子参数 ----关联数组, 按名称使用,和顺序无关 */ $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(?, ?, ?, ?)"); //所有SQL都可执行--syi=== //准备好了一条语句,并入到服务器端,也已经编译过来了,就差为它分配数据过来 // $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(:name,:price, :num, :desn)"); //绑定参数 /* $stmt->bindParam(":name", $name); $stmt->bindParam(":num", $num); $stmt->bindParam(":desn", $desn); $stmt->bindParam(":price", $p); */ //绑定参数 $stmt->bindParam(1, $name, PDO::PARAM_STR); $stmt->bindParam(3, $num, PDO::PARAM_INT); $stmt->bindParam(4, $desn, PDO::PARAM_STR); $stmt->bindParam(2, $p, PDO::PARAM_STR); $name="wwww1"; $num=101; $desn="hello1"; $p=34.51; if($stmt->execute()){ echo "执行成功"; echo "最后插入的ID:".$pdo->lastInsertId(); }else{ echo "执行失败!"; } $name="ooo"; $num=101; $desn="hello1"; $p=34.51; if($stmt->execute()){ echo "执行成功"; echo "最后插入的ID:".$pdo->lastInsertId(); }else{ echo "执行失败!"; } 四:不绑定参数,直接execute中带值执行sql try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有两种占位符号 * * ? 参数 --- 索引数组, 按索引顺序使用 * 名子参数 ----关联数组, 按名称使用,和顺序无关 */ //准备好了一条语句,并入到服务器端,也已经编译过来了,就差为它分配数据过来 $stmt=$pdo->prepare("insert into shops(name, price, num, desn) values(:name,:price, :num, :desn)"); // $stmt->execute($_POST); //传值是可以不按顺序--这是名字参数 $stmt->execute(array(":price"=>99, ":name"=>"kkk1", ":num"=>"451", ":desn"=>"aaaaaa1")); $stmt->execute(array(":price"=>88, ":name"=>"kkk2", ":num"=>"452", ":desn"=>"aaaaaa2")); $stmt->execute(array(":price"=>77, ":name"=>"kkk3", ":num"=>"453", ":desn"=>"aaaaaa3")); 五:获取结果集 try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } //获取结果 fetch()取一条--返回的是关联和索引数组一起返回 //获取结果 fetchAll(); 得到得是二维数组 $stmt=$pdo->prepare("select id, name, price, num, desn from shops where id > :id order by id"); $stmt->execute(array(":id"=>100)); //如果预SQL没有参数时,execute也不用带参数 直接问执行就可以 $stmt->setFetchMode(PDO::FETCH_ASSOC);//设置所有的获取模式,全部是关联数组,下面就不用改啦,也可以卸载fetch里面(PDO::FETCH_ASSOC),不写就是默认的类型关联和索引都返回 /* while($row=$stmt->fetch()){//获取所有查出来的值 循环 print_r($row); echo '<br>'; } */ /* $row=$stmt->fetch(PDO::FETCH_ASSOC);获取关联数组 $row=$stmt->fetch(PDO::FETCH_NUM); 获取索引数组 $row=$stmt->fetch(PDO::FETCH_BOTH); 关联和索引都返回--默认就是这个 print_r($row); */ $data=$stmt->fetchAll(PDO::FETCH_ASSOC); //同上,也可以直接$stmt->setFetchMode(PDO::FETCH_ASSOC);这么设置 echo '<pre>'; print_r($data); echo '</pre>';</span>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。