时时商务社区
标题:
PHP数据对象PDO操作技巧小结
[打印本页]
作者:
bewin83
时间:
2018-2-14 05:32
本文实例讲述了PHP数据对象PDO操作技巧。分享给大家供大家参考,具体如下:
PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。
query($sql) or var_dump($pdo->errorInfo());
// var_dump($res);
$mon = $res->fetch(PDO::FETCH_ASSOC);
echo $mon['goods_price'];
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
PDO操作事务
//开启事务
beginTransacition()
//回滚
rollback()
//提交
commit()
//判断是否处于事务之中
inTransaction()
返回最后插入行的ID
PDO::lastInsertID()
exec()执行
与query()相比,exec()返回的是受影响行数
$sql = "insert into table values('$val')";
if(false===$pdo->exec($sql)){
echo '执行失败';
}
PDO实现预编译
指的是预先编译sql的结构的一种执行sql的语法
如果执行多条结构相同的sql,编译的中间结果(语法树)应该也是一致的,因此可以将相同的结构,统一编译,每次使用不同的数据执行即可。
编译统一的结构
$pdoStatement = $pdo->prepare(sql结构)
绑定数据到中间编译结果
$pdoStatement ->bindValue()
执行
$pdoStatement ->execute()
//$sql = "insert into table values(null,?)";
$sql = "insert into table values(null,:name)";
$stmt = $pdo->prepare($sql);
//多组数据也是一编译一执行
//$stmt->bindValue(1,'bee');
$stmt->bindValue(':name','bee');
$res = $stmt->execute();
var_dump($res);
预编译能更好地防止sql注入,是因为预编译时候不需要用户的数据参与,因此编译时结构固定,所以数据不影响到sql结构。
$pdo->query()与$pdo->execute()如果需要防止sql注入,可以使用$pdo->quote()(其作用是先转义后加引号)
PDOstatement常用方法:
errorInfo()
errorCode()
fetchColumn()
fetch()
fetchAll()
rowCount()
closeCursor()
pdo应用
_initParamas($config);
$this->_initDNS();
$this->_initDriverOptions();
$this->_initPDO();
}
private function __clone(){}
static public function getInstance($config){
if(!static:
_init instanceof static){
static:
_init = new static($config);
}
return static:
_init;
}
private function _initParamas($config){
$this->_host = isset($config['host'])?$config['host']:'localhost';
$this->_port = isset($config['port'])?$config['port']:'3306';
$this->_dbname = isset($config['dbname'])?$config['dbname']:'';
$this->_username = isset($config['username'])?$config['username']:'root';
$this->_passward = isset($config['passward'])?$config['passward']:'';
$this->_charset = isset($config['charset'])?$config['charset']:'utf8';
}
private function _initDNS(){
$this->_dns = "mysql:host=$this->_host;port=$this->_port;dbname=$this->_dbname";
}
private function _initDriverOptions(){
$this->_driverOptions = array(
PDO::MYSQL_ATTR_INIT_COMMAND => "set names $this->_charset"
);
}
private function _initPDO(){
$this->_pdo = new PDO($this->_dns,$this->_username,$this->_passward,$this->_driverOptions) or die("fail");
}
public function query($sql){
if(!$result = $this->_pdo->query($sql)){
$erro = $this->_pdo->errorInfo();
echo '失败的语句'.$sql.'
';
echo '错误代码'.$erro[1].'
';
echo '错误信息'.$erro[2].'
';
die;
}
return $result;
}
public function fetchAll($sql){
$res = $this->query($sql);
$list = $res->fetchAll(PDO::FETCH_ASSOC);
$res->closeCursor();
return $list;
}
public function fetchRow($sql){
$res = $this->query($sql);
$row = $res->fetch(PDO::FETCH_ASSOC);
$res->closeCursor();
return $row;
}
public function fetchOne($sql){
$res = $this->query($sql);
$one = $res->fetchColumn();
$res->closeCursor();
return $one;
}
public function escape_string($data){
return $this->_pdo->quote($data);
}
}
$config = array(
"host"=>"localhost",
"username"=>"root",
"passward"=>"root",
"dbname"=>"students"
);
$pdo = PDODB::getInstance($config);
$sql = "select sdept from student where sage=21";
var_dump($pdo->fetchRow($sql));
?>
运行效果图如下:
更多关于PHP相关内容感兴趣的读者可查看本站专题:《
PHP基于pdo操作数据库技巧总结
》、《
php+Oracle数据库程序设计技巧总结
》、《
PHP+MongoDB数据库操作技巧大全
》、《
php面向对象程序设计入门教程
》、《
php字符串(string)用法总结
》、《
php+mysql数据库操作入门教程
》及《
php常见数据库操作技巧汇总
》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:
php数据库抽象层 PDO
PHP PDO操作总结
详解PHP中的PDO类
php pdo操作数据库示例
PHP中关于PDO数据访问抽象层的功能操作实例
欢迎光临 时时商务社区 (http://bbs.4435.cn/)
Powered by Discuz! X3.2