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>


PDO进行sql语句预处理和操作结果集详细介绍(二)

上一篇:Bug跟踪方法


下一篇:atitit.查看预编译sql问号 本质and原理and查看原生sql语句