1、数据查询
①query
query()执行一条SQL语句,返回PDOStatement对象,也就是说query()不仅可以执 行select语句,同样可以执行其他类型的SQL语句。
下面我们用实例来演示query()执行select语句。
<?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=test','root','root'); $sql='select * from test_pdo where id=15'; $stmt=$pdo->query($sql); var_dump($stmt); echo '<hr/>'; foreach($stmt as $row){ print_r($row); } }catch(PDOException $e){ echo $e->getMessage(); }
从案例中可以发现,query的使用非常简单,只要会写原生的mysql语句,然后把sql当参数传给query()就可以 拿到我们想要的结果了。
②prepare()和execute()预处理查询
预处理对数据库操作来说非常重要,PDO同样可以通过预处理来执行SQL语句,确保
数据库数据安全。
prepare()准备执行一条SQL语句,返回PDOStatement
通过prepare()返回的PDOStatement对象中的execute()来执行SQL,如果执行成功则返回true,执行失败返回 false,如果要获取预处理查询语句的结果集需要PDOStatement对象的fetch()方法或者fetchAll()方法获取
<?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=test','root','root'); $sql='select * from test_pdo where username="testuser1"'; //prepare($sql):准备SQL语句 $stmt=$pdo->prepare($sql); //execute():执行预处理语句 $res=$stmt->execute(); //var_dump($res); //fetch():得到结果集中的一条记录 $row=$stmt->fetch(); print_r($row); //var_dump($stmt); }catch(PDOException $e){ echo $e->getMessage(); }
2、fetch/fetchAll 获取结果集
fetchAll()获取所有查询结果集
<?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=test','root','root'); $sql='select * from user'; $stmt=$pdo->prepare($sql); $res=$stmt->execute(); // if($res){ // while($row=$stmt->fetch()){ // var_dump($row); // echo '<hr/>'; // } // } $rows=$stmt->fetchAll(); echo "<pre>"; var_dump($rows); //var_dump($stmt); }catch(PDOException $e){ echo $e->getMessage(); }
fetch 从结果集中获取下一行
<?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=test','root','root'); $sql='select * from test_pdo where id=17'; $stmt=$pdo->prepare($sql); $res=$stmt->execute(); $rows=$stmt->fetch(); var_dump($rows); }catch(PDOException $e){ echo $e->getMessage(); }
在用fetch()或fetchAll()获取结果集时可以通过传递参数设定获取结果的类型,传递的参数必须是 PDO::FETCH_* 系列常量中的一个,缺省为 PDO::ATTR_DEFAULT_FETCH_MODE 的值 (默认为 PDO::FETCH_BOTH )
#fetch()、fetchAll() 可传递的参数: PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组 PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以0开始的列号的数组 PDO::FETCH_BOUND:返回 TRUE ,并分配结果集中的列值给 PDOStatement::bindColumn() 方法绑定的 PHP 变量。 PDO::FETCH_CLASS:返回一个请求类的新实例,映射结果集中的列名到类中对应的属性名。如果 fetch_style 包含 PDO::FETCH_CLASSTYPE(例如:PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE),则类名由第一列的值决定 PDO::FETCH_INTO:更新一个被请求类已存在的实例,映射结果集中的列到类中命名的属性 PDO::FETCH_LAZY:结合使用 PDO::FETCH_BOTH 和 PDO::FETCH_OBJ,创建供用来访问的对象变量名 PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组 PDO::FETCH_OBJ:返回一个属性名对应结果集列名的匿名对象