摘要:
随着PHP的不断升级,之前习惯的mysql_connect连接数据库方法大有被新的PDO完全取代之势,这里把常用方法都试了一遍, 做个整理, 方便大家以后使用&...
随着PHP的不断升级,之前习惯的mysql_connect连接数据库方法大有被新的PDO完全取代之势,这里把常用方法都试了一遍, 做个整理, 方便大家以后使用
<?php /* 1, 主机地址:localhost表示本机 2,dbname:数据库名称 zhuangzi是我在本地创建的数据库 3, $db = new PDO($dsn, 'root', 'root'); 两个root分别是连接数据库的用户名和密码, $db为 据库名称*/ $dsn = "mysql:host=localhost;dbname=zhuangzi";//构造数据源 try{ $db = new PDO($dsn, 'root', 'root');//初始化一连接到数据库 zhuangzi 的PDO对象 } catch(Exception $e){ echo "数据库连接错误"; exit(); } $db->exec("SET names 'utf8'"); /*执行数据库的插入, 当然student表是已经在数据库中存在的了*/ $sql = "insert into student set names = 'DurkBlue', sex = '男', hobby = '乒乓球,篮球'"; $count = $db->exec($sql); //$db->query($sql); /* 需要有记录结果返回时用exec方法, 否则用query方法 */ /*执行数据库的修改*/ $sql = "update student set names = 'DurkBlue国', sex = '男', hobby = '足球' where id=19"; $count = $db->exec($sql); //$db->query($sql); /*查询数据数据库的表*/ $sql = "select * from student"; $result = $db->query($sql); /* 一行一行的读取数据 方法1: */ while($row = $result->fetch()){ echo "ID:".$row["id"]."姓名:".$row["names"]."<br/>"; } /* 方法2:一下子获取所有记录,数字索引和关联索引都有,浪费资源 */ $result_all = $result->fetchAll(); foreach($result_all as $row){ echo "ID:".$row["id"]."姓名:".$row["names"]."<br/>"; } /* 方法3:一下子获取所有记录,只关联名称索引 */ $result->setFetchMode(PDO::FETCH_ASSOC); //只关联名称索引 $result_arr = $result->fetchAll(); foreach($result_arr as $row){ echo "ID:".$row["id"]."姓名:".$row["names"]."<br/>"; } /* 预编译的使用,感觉这个与java中的用法是一样的,更加安全,更加快 */ //用名称参入参数 $sql = 'insert into student (names,sex,hobby) VALUES (:names, :sex,:hobby)'; $result = $db->prepare($sql); //返回一个PDOStament 对象 //绑定数据 PDOStament对象的bindParam()来绑定参数:占位符,实际数据 $result->bindParam(':names',$names); $result->bindParam(':sex',$sex); $result->bindParam(':hobby',$hobby); //用位置参入参数 $sql = "insert into student(names,sex,hobby) VALUES (?,?,?)"; $result = $db->prepare($sql); $result->bindParam(1, $names); $result->bindParam(2, $sex); $result->bindParam(3, $hobby); $names= 'DurkBlue'; $sex= '男'; $hobby= '围棋,周游'; $result->execute(); /* PDO中的查询操作:exec/query/prepared statement 在PDO中有三种方法执行查询操作,分别是用exec、query和使用prepared statement。三种方法各有利弊,先说exec。 (1)PDO::exec()一般用于执行一次的SQL语句,返回受查询影响的行数。它不适用于SELECT语句,如果需要用一次是SELECT语句,可以用PDO::query();也不适用于多次使用的语句,如果有多次使用的需求,考虑用PDO::prepare()。 (2)PDO::query()用于执行一次SELECT语句,执行后应当随即使用PDOStatement::fetch()语句将结果取出,否则立即进行下一次的PDO::query()将会报错。 (3)PDOStatement表示一个prepared statement语句,而在执行之后,又将返回一组关联数组的结果。如果一类查询(查询结构相似而具体的参数不一)需要一次解析而执行使用很多次,可以先用prepared statement,这样可以为具体的查询的执行做好准备,避免了分析、编译、优化的循环,将减少资源占用率,从而提高运行效率。通过对数据库进行prepare操作,便会返回PDOStatement数据类型,从而在其基础上展开execute、fetch等进一步的操作。 PDO->exec() — 处理一条SQL语句,并返回所影响的条目数 PDO->lastInsertId() — 获取写入的最后一条数据的主键值 PDO->prepare() — 生成一个“查询对象” PDO->query() — 处理一条SQL语句,并返回一个“PDOStatement” */?>