摘要:
随着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”
*/?>