链接PDO
$pdo=new PDO('mysql:host=127.0.0.1;dbname=','root','root');
在PDO执行$sql语句的是exec(增删改)
$sql="";
$pdo->exec($sql)
在执行$sql后判断
if($sql->errorCode())
{
var_dump($pdo->errorInfo());//打印详细详细信息
}
执行查的话运用query()
//预处理
节省带宽,防止$sql注入
PDO的预处理
第一步准备预处理
//当使用?问号占位符时
$stmt=$pdo->prepare("select * from 表名 where id=?");
问号相当于一个占位符然后他并判断当用?占位时,对象必须是索引数组
if($stmt->execute(array(1)))
{//获取数据
$data=$stmt->fetch();
}
当使用:id占位符时
即$stmt=$pdo->prepare("select * from 表名 where id=:id");
运用:占位符时必须使用关联数组
if($stmt->execute(array(":id"=>1))
{//获取数据
$data=$stmt->fetch();
}
//也可以限定多个ID
即$stmt=$pdo->prepare("select * from 表名 where id=:id or id=:id2");
if($stmt->execute(array(":id"=>1,":id2"=>2)))
{//获取数据
$data=$stmt->fetch();
}
$pdo = dbconnect('test','root','root');
$sql = 'select * from login where token=:token';
$stmt = $pdo->prepare($sql);
$re = $stmt->execute(array('token'=>$token));
if($re){
$data=$stmt->fetch(PDO::FETCH_ASSOC);
}
function dbconnect($dbname,$username,$pwd){
// echo $username;die;
$dsn = 'mysql:host=localhost;dbname='.$dbname;
$pdo = new PDO($dsn,$username,$pwd);
$pdo->query('set names utf8');
return $pdo;
}
PHP5中使用PDO连接数据库的方法
PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等。
1.PDO简介
PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等。
PHP6中也将默认使用PDO的方式连接,mysql扩展将被作为辅助
2.PDO配置
PHP.ini中,去掉"extension=php_pdo.dll"前面的";"号,若要连接数据库,还需要去掉与PDO相关的数据库扩展前面的";"号,然后重启Apache服务器即可。
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll
extension=php_pdo_firebird.dll
......
3.PDO连接mysql数据库
new PDO("mysql:host=localhost;dbname=db_demo","root","");
默认不是长连接,若要使用数据库长连接,需要在最后加如下参数:
new PDO("mysql:host=localhost;dbname=db_demo","root","","array(PDO::ATTR_PERSISTENT => true) ");
4.PDO常用方法及其应用
PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作
PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作
PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID
PDOStatement::fetch() 是用来获取一条记录
PDOStatement::fetchAll() 是获取所有记录集到一个中
5.PDO操作MYSQL数据库实例
<?php
$pdo = new PDO("mysql:host=localhost;dbname=db_demo","root","");
if($pdo -> exec("insert into db_demo(name,content) values('title','content')")){
echo "插入成功!";
echo $pdo -> lastinsertid();
}
?>
<?php
$pdo = new PDO("mysql:host=localhost;dbname=db_demo","root","");
$rs = $pdo -> query("select * from test");
while($row = $rs -> fetch()){
print_r($row);
}
?>
一、预处理语句可以带来两大好处:
1、查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次。当查询准备好后,数据库将分析、编译和优化
执行该查询的计划。对于复杂的查询,此过程要花费较长的时间,如果需要以不同参数多次重复相同的查询,那么该过程将大
大降低应用程序的速度。通过使用预处理语句,可以避免重复分析/编译/优化周期。简言之,预处理语句占用更少的资源,因
而运行得更快。
2、提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理。如果应用程序只使用预处理语句,可以确保不会
发生SQL 注入。(然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQL 注入的风险)。
二、预处理实例:
最佳方式:
预处理批量操作实例: