pdo初学习

27 篇文章 0 订阅

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等函数)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值