PHP—PDO对象操作数据库及MYSQL行锁应用

本文介绍了PHP Data Object (PDO)的概念及如何配置PDO进行数据库连接。提供了PDO连接MySQL数据库的方法,并展示了PDO的常用方法如query(), exec(), lastInsertId()等的实际应用场景。通过具体的PHP代码示例,帮助读者掌握PDO的基本使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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","password",array(PDO::ATTR_PERSISTENT => true) ); 
4.PDO常用方法及其应用 
PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作 
PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作 
PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID 
$this->db->lastInsertId();

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); 
} 
?> 

详细出处参考:http://www.jb51.net/article/24434.htm


create table `car`(`name` varchar(32), `type` varchar(32)); 

<?php 
$db = new PDO("mysql:host=localhost:3306;dbname=test", 'root', ''); 

// works regardless of statements emulation 
// $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); 
// 

$sql = "DELETE FROM car; INSERT INTO car(name, type) VALUES ('car13', 'coupe'); INSERT INTO  car(name, type) VALUES ('car2', 'coupe');"; 
// 
try { 
    //$db->exec($sql); 
  $db->query($sql); 
  //$stmt = $db->prepare($sql); 
  //$stmt->execute(); 
} 
catch(PDOException $e){ 
    echo $e->getMessage(); 
    die(); 
}

<?php
try{  
BEGIN;  
  
SELECT FId, FCode FROM Tbl_Code WHERE  FStatus=0 limit 1 for update;  
  
  
UPDATE Tbl_Code SET FStatus=1 WHERE  FId = '' AND FStatus=0  
  
COMMIT;  
} catch (exception $e){  
  
rollback;  
  
  
} 
?>


在PHP手册回帖中看得到的一种风格顺便记录:

<?php 
$sql = <<<____SQL 
     CREATE TABLE IF NOT EXISTS `ticket_hist` ( 
       `tid` int(11) NOT NULL, 
       `trqform` varchar(40) NOT NULL, 
       `trsform` varchar(40) NOT NULL, 
       `tgen` datetime NOT NULL, 
       `tterm` datetime, 
       `tstatus` tinyint(1) NOT NULL 
     ) ENGINE=ARCHIVE COMMENT='ticket archive'; 
     CREATE TABLE IF NOT EXISTS `request_hist` ( 
       `rqid` int(11) NOT NULL, 
       `rqtid` int(11) NOT NULL, 
       `rqsid` int(11) NOT NULL, 
       `rqdate` datetime NOT NULL, 
       `rqcode` tinyint(1) NOT NULL, 
       `rssid` int(11) NOT NULL, 
       `rsdate` datetime, 
       `rscode` tinyint(1) 
     ) ENGINE=ARCHIVE COMMENT='request archive'; 
     CREATE TABLE IF NOT EXISTS `relay_hist` ( 
       `rqid` int(5) NOT NULL, 
       `sdesc` varchar(40) NOT NULL, 
       `rqemail` varchar(40) NOT NULL, 
       `sid` int(11) NOT NULL, 
       `rlsid` int(11) NOT NULL, 
       `dcode` varchar(5) NOT NULL 
     ) ENGINE=ARCHIVE COMMENT='relay archive'; 
____SQL; 
$result = $this->db->getConnection()->exec($sql); 
?> 


http://www.php.net/manual/zh/ref.pdo-mysql.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值