pdo中几种查询方式的区别

(1)exec

php手册中对其的描述是:执行一条 SQL 语句,并返回受影响的行数。

从中可以看出,execute可应用于“增删改查”中的增删改。因为查询操作会返回一个结果集,而exec函数只能返回受影响的函数。

(2)query

对应于“增删改查”中的“查”。用于执行一次的sql语句,返回一个PDOStatement结果集。此结果可认为是多维数组,可以直接使用。

(3)prepare

对于重复执行的语句,可以使用prepare作预处理(优化)。因为每次的查询语句执行之前都需要编译,通过prepare之后,可节省重复编译查询语句的开销。先prepare再execute。此时返回一个PDOStatement结果集,PDOStatement是一个对象,可以使用它的成员方法来处理结果集。视结果集类型的不同,也可直接将其作为多维数组使用。

如果prepare传入的sql语句是可变的话,可以通过bindParam来为其绑定参数,然后execute。

PS:prepare+execute的组合,可以适用于于“增删改查”所有的操作。


下面来看具体的使用例子:

<?php
$dsn      = "mysql:dbname=pdo;host=localhost";
$user     = "root";
$password = "root";
$dbh      = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//使用exec进行增删改
$sqlcmd = "insert into userinfo values (rand(),rand())";
$dbh->exec($sqlcmd);

//使用query进行查询操作
$sqlcmd = "select * from userinfo";
try {
    $data = $dbh->query($sqlcmd);
    foreach ($data as $row) {
        print_r($row);
        echo '<br>';
    }
}
catch (PDOException $e) {
    echo $e->getMessage();
}

//prepare先预处理,然后绑定参数,然后execute
$sqlcmd     = 'select  password from userinfo where username = :pname';
$res        = $dbh->prepare($sqlcmd);
$puser_name = "aaa";
$res->bindParam(':pname', $puser_name, PDO::PARAM_STR, 200);
$res->execute();
foreach ($res as $row) {
    print_r($row);
    echo "<br>";
}

?>

这只是最基本的使用例子。一般来说,在具体的项目中都会使用一个PDO封装类,有的框架如zendframework还自带了数据库处理类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值