Blogger Information
Blog 40
fans 1
comment 0
visits 32711
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
pdo初学习
李明伟的博客
Original
977 people have browsed it

pdo执行sql语句的方法

1.用pdo连接数据库

//创建数据库对象
$dsn = 'mysql:host=127.0.0.1;dbname=liuyanban';//数据源,不要加空格!!!
$user = 'root';
$password = 'root';
//$pdo = new PDO('数据源', '用户名', '密码');
$pdo = new PDO($dsn, $user, $password);

要点:1.dsn——数据源:包括服务器地址,数据库名称

          2.创建pdo变量的方法——new PDO('数据源', '用户名', '密码');

2.编写sql语句,创建预处理对象

// 2. 准备SQL语句,创建预处理对象
$sql = 'SELECT * FROM `message` where id = :id';//模板语句
$stmt = $pdo->prepare($sql);//$stmt为预处理对象

要点:1.':id'——id的占位符,以此类推。

          2.Prepare()方法负责准备要执行的查询

3.为模板语句中的占位符绑定变量参数,并执行该语句

$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$id = 3;
$res = $stmt->execute();
if ($res) {
    $result = $stmt->fetch(PDO::FETCH_ASSOC);// fetch_style:控制结果集的返回方式
    print_r($result);
}

要点: 1.bindParam——绑定一个参数到指定的变量名。(bindValue——绑定一个值到指定的参数)

            PDO::PARAM_INT——规定变量的数据类型

         2.execute()执行sql语句

         3.fetch()获取第一条受影响的语句。(fetchall()——获取受影响的所有语句,一般配合分页使用)

         4参数 fetch_style:控制结果集的返回方式,其中可选择的值如下表:

            值                                  说 明    

            PDO::FETCH_ASSOC     关联数组形式。    

            PDO::FETCH_NUM        数字索引数组形式。    

            PDO::FETCH_BOTH       两者数组形式都有,这是默认的。    

            PDO::FETCH_OBJ          按照对象的形式,类似于以前的mysql_fetch_object()函数。    

            PDO::FETCH_BOUND    以布尔值的形式返回结果,同时将获取的列值赋给bindParam()方法中指定的变量。    

            PDO::FETCH_LAZY        以关联数组、数字索引数组和对象3种形式返回结果。    

注:‘->’与‘=>’的区别——前者是指从一个类中调用一个方法,后者是将它前面的值赋予它后面的参数。

        若不想使用绑定参数的方法,可以使用直接在execute()的方法中赋值格式如下

$res = $stmt->execute(array(':id'=>3));

        execute()与exec()与query()的区别

PDO::query执行一条SQL语句,如果通过,则返回一个PDOStatement对象。PDO::query函数有个“非常好处”,就是可以直接遍历这个返回的记录集。

query同传统的mysql query函数类似,同样需要对开发者自行对输入的sql语句进行安全检查。

query因为会返回PDOStament对象,似乎用在SELECT语句执行上更合适,这跟上文提到的query支持直接遍历不谋而合。

query执行后,在下一次query执行之前,如果不取走所有返回的记录集,则query将会执行失败,除非我们调用 PDOStatement::closeCursor()来释放数据库资源与PDOStatement对象。


PDO::exec执行一条SQL语句,并返回受影响的行数。此函数不会返回结果集合。官方建议:

对于在程序中只需要发出一次的 SELECT 语句,可以考虑使用 PDO::query()。

对于需要发出多次的语句,可用 PDO::prepare() 来准备一个 PDOStatement 对象并用 PDOStatement::execute() 发出语句。

PDO::exec支持SELECT/DELETE/UPDATE/INSERT等全部SQL语句执行,所以相比PDO query()函数功能要强大的多。由于只返回受影响的函数,所以,如果执行SELECT则无法得到PDOStatement对象,故也无法遍历结果集,只能按照官方建议去使用query或execute函数。

再看一下PDOStatement::execute函数,execute函数是用于执行已经预处理过的语句,只是返回执行结果成功或失败。也就是说execute需要配合prepare函数使用,这个的确是麻烦了一点,每次都要先prepare,然后才能exec。所以,如果执行SELECT等SQL语句,则还需要借助fetch等函数进行结果读取(当然上文的query也是可使用fetch等函数)。


Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!