sqlite 使用PDO执行SQL语句exec()、query()

在PHP脚本中,通过PDO执行SQL查询与数据库进行交互,可以分为三种不同的策略,使用哪一种方法取决于你要做什么操作。

1、使用PDO::exec()方法

当执行INSERT、UPDATE和DELETE等没有结果集的查询时,使用PDO对象中的exec()方法去执行。该方法成功执行后,将返回受影响的行数。注意,该方法不能用于SELECT查询。示例如下所示:


<?php
    try {
        $pdo = new PDO ('mysql:host=localhost;dbname=testdb','root','123');
        $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $pdo->exec('set names "utf8"');
    } catch (PDOException $e) {
        exit("数据库连接失败: ".$e -> getMessage());
    }

    $sql = "UPDATE contactInfo SET phone='15801680168' where name='高某某'";

    //使用exec()方法可以执行INSERT、UPDATE、DELETE等

    $affected = $pdo->exec($sql);

    if ($affected) {
        echo "数据表中受影响的行数为: ".$affected;
    } else {
        print_r($pdo->errorInfo());
    }
    
 ?>

2、使用PDO::query()方法

当执行返回结果集的SELECT查询时,或者所影响的行数无关紧要时,应当使用PDO对象中的query()方法。如果该方法成功执行指定的查询,则返回一个PDOStatement对象。如果使用了query()方法,并想了解获取的数据行总数,可以使用PDOStatement对象中的rowCount()方法获取。示例代码如下所示:


 <?php  
     try {
        $pdo = new PDO ('mysql:host=localhost;dbname=testdb','root','123');
        $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $pdo->exec('set names "utf8"');
    } catch (PDOException $e) {
        exit("数据库连接失败: ".$e -> getMessage());
    }
    $sql = "SELECT name, phone, email FROM contactInfo WHERE departmentId='D01'";
    try {
        //执行SELECT查询,并返回PDOstatement对象  
        $pdostatement = $pdo->query("$sql");
        echo "一共从表中获取到".$pdostatement->rowCount()."条记录:n";
        //利用循环输出
        foreach ($pdostatement as $row) {
            echo $row['name'] . "t";           //输出从表中获取到的联系人的名字
            echo $row['phone'] . "t";       //输出从表中获取到的联系人的电话
            echo $row['email'] . "n";       //输出从表中获取到的联系人的电子邮件
        }
    } catch (PDOException $e) {
        echo $e->getMessage(); 
    }
 ?>

3、使用PDO::prepare()和PDOStatement::execute()两个方法

当同一个查询需要多次执行时(有时需要迭代传入不同的列值),使用预处理语句的方式来实现效率会更高。使用预处理语句就需要使用PDO对象中的prepare()方法去准备一个将要执行的查询,再使用PDOStatement对象中的execute()方法来执行。

 
© 版权声明
THE END
喜欢就支持一下吧
点赞11
评论 抢沙发

请登录后发表评论

    暂无评论内容