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>
时间: 2024-11-08 21:21:29

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

SQLSERVER 根据传入的参数拼接sql语句字符串,反馈结果集

ALTER PROCEDURE [dbo].[usp_visit_detail](@siteid BIGINT, @Startime VARCHAR(15), @Endtime  VARCHAR(15), @Aflag  INT = 10,                                    --初始值为10,非10,则表示有传入参数 @Area   VARCHAR(20) = 'N',               -- --初始值为N,非N,则表示有传入参数 @Nflag  

sql语句基本查询操作

表结构 SQL> desc empName Type Nullable Default Comments -------- ------------ -------- ------- -------- EMPNO NUMBER(4) ENAME VARCHAR2(10) Y 员工姓名 JOB VARCHAR2(9) Y MGR NUMBER(4) Y HIREDATE DATE Y SAL NUMBER(7,2) Y COMM NUMBER(7,2) Y DEPTNO NUMBER(2) Y 查

数据存储——SQLite数据库存储——SQL语句——DML数据操作语言、内置函数聚合函数

一.连接查询之内连接 select   a.字段,b.字段   from   表1   a,表2   b    where   a.字段=b.字段  And ... 二.DML 数据操作语言 1.增  insert  into values 1-insert  into 表名  values (跟所有字段一一对应的值的列表) 2-insert  into 表名(字段列表)  values (跟字段列表一一对应的值的列表) 3-insert  into 表名  select  对应的字段列表  f

Oracle:SQL语句--对表的操作——修改表名

1 – 修改表名(未验证在有数据,并且互有主外键时,是否可用) 2 3 语法: 4 rename 现表名 to 新表名; 5 6 例: 7 rename T_Student2 to T_Stu;

PDO预编译语句执行查询与DML操作

代码示例: MyPDO.class.php的代码如下: /** * 使用PDO预编译语句执行DML操作并返回受影响的行数 * @param $sql 需要执行的SQL语句(预编译语句写法) * @param array $arr 预编译语句需要添加的数据值,数组结构 * @return int 返回DML执行后受影响的行数 */public function intByPdoPrepare($sql, array $arr=array()){ $ps =$this->pdo->prepare(

Python 操作文件模拟SQL语句功能

Python操作文件模拟SQL语句功能 一.需求 当然此表你在文件存储时可以这样表示 1,Alex Li,22,13651054608,IT,2013-04-01 现需要对这个员工信息文件,实现增删改查操作 1. 可进行模糊查询,语法至少支持下面3种: 1. select name,age from staff_table where age > 22 2. select * from staff_table where dept = "IT" 3. select * from

Python操作文件模拟SQL语句功能

一.要求 当然此表你在文件存储时可以这样表示 1,li,22,18230393840,IT,2013-06-01 现需要对这个员工信息文件,实现增删改查操作 1. 可进行模糊查询,语法至少支持下面3种:     1. select name,age from staff_table where age > 22     2. select  * from staff_table where dept = "IT"     3. select  * from staff_table

PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05

之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本语句(以MySQL数据库为例,因为电脑没有其他的数据库) (1)造PDO对象 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); 格式: $dsn

sql语句的进化--hibernate篇

Hibernate对JDBC进行了封装: 1)Hibernate属于持久层的框架(典型三层架构:表示层.业务层.持久层),其他的持久层比如myBatis等 2)hibernate是开源的一个ORM(对象关系映射)框架 ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射.从对象(Object)映射到关系(Relation),再从关系映射到对象.这 样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(