PDO操作数据库

来源:互联网 发布:电子表格怎么合计数据 编辑:程序博客网 时间:2024/06/09 14:20


1、新建PDO对象链接数据库,执行exec(),lastInsertId()方法

<?phptry{    $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、通过statement对象执行查询

    $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);




0 0
原创粉丝点击