PDO操作数据库


1、通过exec()方法实现数据库增加、删除、修改操作

<?php
try{
    $dsn="mysql:host=localhost;dbname=phpdemo";
    $username="root";
    $pswd="1234";
    //连接数据库,新建PDO对象
    $pdo=new PDO($dsn,$username,$pswd);
    //使用exec方法执行数据库操作并返回受影响的行数,若无,返回0,执行错误返回boolean false
    //exec方法不能执行select语句
    $sql=<<< EOF
        insert staff(name,sex,job) values('洪七公','男','丐帮帮主'),
        ('杨过','男','独臂大侠'),('小龙女','女','古墓派弟子')
EOF;

    $res=$pdo->exec($sql);
    echo "受影响行数:".$res;
    //$pdo->lastInsertId()方法返回最后插入的ID号
    echo "最后插入id为".$pdo->lastInsertId();
}catch (PDOException $e){
    echo $e->getMessage();
}

结果如下:

2、显示错误信息:errorCode(),errorInfo()

    $sql="insert staff(name,sex,jobs) values('洪七公','男','丐帮帮主')";
    $res=$pdo->exec($sql);
    if(false==$res){
        echo "错误编号:".$pdo->errorCode();
        echo "<pre>";
        print_r($pdo->errorInfo());
        echo "</pre>";
    }
在上面我把job错写为jobs,运行结果如下:

3、通过query()方法执行查询操作

    $sql="select * from staff";
    $stmt=$pdo->query($sql);
    var_dump($stmt);
    //执行query()方法返回一个statement对象,失败返回false,可以通过数组遍历该对象
    foreach ($stmt as $row){
        echo "<pre>";
        print_r($row);
        echo "</pre>";
        //通过关键字访问数组
        echo "姓名:".$row["name"];
    }

结果如下:

或者将结果储存在一个数组中,以后访问

    foreach ($stmt as $row){
        $res[]=$row;
    }
    echo "姓名:".$res[1]["name"];

4、通过prepare()、execute()预处理方式执行查询

    $sql="select * from staff";
    //PDO的prepare方法准备sql语句,返回statement对象
    $stmt=$pdo->prepare($sql);
    //statement对象执行
    $stmt->execute();
    //stmt的fetch方法从结果集中取出一条记录
    $row=$stmt->fetch();
    print_r($row);

如果结果集中有多条记录,可以将fetch()改为fetchall()获取结果集中所有记录。

两种方法都可以对返回数组是关联、数字或者两者进行设置:$res=$stmt->fetchAll(PDO::FETCH_ASSOC),数字为PDO::FETCH_NUM,默认为两者都返回。

还可以通过PDO::FETCH_BOUND将返回列绑定到变量:

    $sql="select username,sex,job from login";
    $stmt=$pdo->prepare($sql);
    $stmt->execute();
    //将返回的列与变量绑定,列序号为返回列的顺序
    $stmt->bindColumn(1,$username);
    $stmt->bindColumn(2,$sex);
    $stmt->bindColumn(3,$job);
    //设置fetch的参数PDO::BOUND
    while($stmt->fetch(PDO::FETCH_BOUND)){
        echo "姓名:$username,性别:$sex,职位:$job<br>";
    }
fetchColumn()方法返回一行中的指定列,由于返回后指针向下移动,无法再继续返回同一行中的其他列数据。

statement的debugDumpParams()方法打印执行的sql语句:

$sql="insert login(username,password,mail) values(?,?,?)";
$stmt=$pdo->prepare($sql);
$username='测试';
$password="ceshi";
$stmt->bindParam(1,$username);
$stmt->bindParam(2,$password);
$stmt->bindValue(3,'default@qq.com');
$stmt->debugDumpParams();

结果如下:

statement的nextRowset()方法可以在返回多个结果集时,切换下一个结果集:

    $sql="select username,sex,job from login;//分号分割多个sql语句
          select * FROM staff;";
    $res=$pdo->query($sql);
    //将返回的列与变量绑定,列序号为返回列的顺序
    $row=$res->fetchAll();
    print_r($row);
    echo "<hr>";
    //切换下一个结果集
    $res->nextRowset();
    $row=$res->fetchAll();
    print_r($row);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值