在这里和大家说一个技术
pdo技术 PDO就是PHP data Object 提供了PHP操作多种数据库的统一的接口
和MySQL的不同就是 pdo可以操作多种数据库 MySQL就能操作一个
PDO是PHP5新加入的一个重大功能,我们的数据库服务器为MySQL,所有的程序代码的数据库操作全是一mysql()或者mysqli()函数来操作,当我们的数据库 需要更换时比如换成,SQL、SERVER、PostgreSQL、MS 等,我们不可能去修改所有的程序代码!所以就要用到PDO,PDO很好的帮我们解决了这个问题,使用PDO操作非常方便,只需要修改数据源格式,和加载相应的驱动文件到PHP.ini即可;
特点
1)编码的一致性
2)灵活性
3)面向对象特性
4)高性能
用法
修改
打开PHP配置文件php.ini,找到php_pdo_mysql.dll这行去掉前面你的分号
打开PHP配置文件php.ini,找到extension_dir,这个就是我们扩展存在的目录,首先去掉前面的分号,然后修改扩展目录,我的扩展目录是在"E:/Web/php/ext",就改成extension_dir="E:/Web/php/ext"。
然后重启apache
//使用方法
连接数据库、数据库的用户名、数据库的密码
语法:$dsn =“数据库类型:dbname=数据库名;host=数据库的域名”;
$user = "数据库的用户名";
$password = "数据库的密码";
例:$dsn = "mysql:dbname=test;host=127.0.0.1";
$user = "root";
$password="123456";
(2)声明对象
$object = new PDO($dsn,$user,$password);
//添加代码
<?php
header('content-type:text/html;charset=utf8');
//连接数据库
$dsn="mysql:dbname=test;host=127.0.0.1";
//数据库的用户名
$user="root";
//数据库的密码
$password="123456";
//生成PDO对象
$object = new PDO($dsn,$user,$password);
//执行添加
$sql="insert into student(`name`,`sex`,`sex`) values('zhangsan','男','18')";
if($object->exec($sql)){
echo '添加成功';
}
//查询
<?php
header('content-type:text/html;charset=utf8');
//连接数据库
$dsn="mysql:dbname=test;host=127.0.0.1";
//数据库的用户名
$user="root";
//数据库的密码
$password="123456";
//生成PDO对象
$object = new PDO($dsn,$user,$password);
$sql="select * from student";
$result = $object->query($sql);
while($arr=$result->fetch()){
print_r($arr);
}
//另一种查询
$data=$result->fetchAll();
print_r($student_info);
这是pdo的使用 但是这样写我们的安全很差
因为我么只要知道其中一个用户名 我们使用 用户名 ‘OR’1‘=’1 这样的格式就可以把用户名的密码给破解出来
但是我们是可以预防的 我们有一个预处理方式
PDO预处理
PDOStatement类:准备语句,处理结果集
也就是预处理,安全,高效,推荐使用
两种占位符号:?参数 索引数组,按索引顺序使用
名子参数 关联数组,按名称使用,和顺序无关,以冒号开头,自己定义
$stmt=$pdo->prepare($sql); $sql可是是任意sql语句,这与mysqli不同
两种点位符号
<?php
try{
$pdo=new PDO("mysql:host=localhost;dbname=mysqldb","root","snail");
}catch(PDOException $e){
echo $e->getMessage();
}
//准备一条语句,并放到服务器端,而且编译
$stmt=$pdo->prepare("insert into shop(name,price)values(?,?)");
// $stmt=$pdo->prepare("insert into shop(name,price)values(:na,:pr)");
//绑定参数(变量和参数绑定)
$stmt->bindparam(1,$name);
$stmt->bindparam(2,$price);
// $stmt->bindparam(":na",$name);
// $stmt->bindparam(":pr",$price);
$name="liwu11";
$price=234.4311;
if($stmt->execute()){
echo "执行成功";
echo "最后插入的ID:".$pdo->lastInsertId();
}else{
echo "执行失败";
}
?>
<?php
//以数组方式向服务器传值
try{
$pdo=new PDO("mysql:host=localhost;dbname=mysqldb","root","snail");
}catch(PDOException $e){
echo $e->getMessage();
}
$stmt=$pdo->prepare("select * from shop where id >:id");
$stmt->execute(array(':id'=>130));
$row=$stmt->fetch();
print_r($row);
echo '<br>';
?>
<?php
//用fetch(),fetchAll()来获取查询结果
try{
$pdo=new PDO("mysql:host=localhost;dbname=mysqldb","root","snail");
}catch(PDOException $e){
echo $e->getMessage();
}
$stmt=$pdo->prepare("select * from shop where id >:id");
$stmt->execute(array(':id'=>130));
/* 单条获取fetch()
$stmt->setFetchMode(PDO::FETCH_ASSOC); //设置获取模式
while($row=$stmt->fetch()){
print_r($row);
echo '<br>';
}
*/
//多条获取fetchAll()
// $stmt->setFetchMode(PDO::FETCH_ASSOC);
$data=$stmt->fetchAll(PDO::FETCH_ASSOC); //也可以用上句进行设置
echo '<pre>';
print_r($data);
echo '</pre>';
?>
<?php
//以表格输出查询结果
try{
$pdo=new PDO("mysql:host=localhost;dbname=mysqldb","root","snail");
}catch(PDOException $e){
echo $e->getMessage();
}
$stmt=$pdo->prepare("select id,name,price from shop where id >:id");
$stmt->execute(array(':id'=>130));
$stmt->bindColumn(id,$id);
$stmt->bindColumn(name,$name);
$stmt->bindColumn(price,$price);
echo '<table border=1 align="center" width=800px>';
echo '<tr>';
for($i=0;$i<$stmt->columncount();$i++){
$field=$stmt->getColumnMeta($i);
echo '<th>'.$field["name"].'</th>';
}
echo "</tr>";
while($stmt->fetch()){
echo '<tr>';
echo '<td>'.$id.'</td>';
echo '<td>'.$name.'</td>';
echo '<td>'.$price.'</td>';
echo '</tr>';
}
echo '</table>';
echo "行:".$stmt->rowcount()."<br>";
echo "列:".$stmt->columncount()."<br>";
?>
用这种方式就很安全