PHP PDO的简单使用(query(),exec(),prepare(),Transaction,行锁) <?php #数据库连接 $dbtype = 'mysql'; $host = 'localhost'; $db = 'test'; $user = 'root'; $psw = '19sucai'; $dsn = $dbtype . ':host=' . $host . ';' . 'dbname=' . $db; try { $dbh = new PDO($dsn, $user, $psw, array(PDO::ATTR_PERSISTENT=>true)); echo '连接成功<br>'; } catch(Exception $e) { die('Connect Failed Message: ' . $e->getMessage()); } #使用query函数查询 $sql = 'SELECT * FROM user'; $query = $dbh->query($sql); $query->setFetchMode(PDO::FETCH_ASSOC); //设置结果集返回格式,此处为关联数组,即不包含index下标 $rs = $query->fetchAll(); var_dump($rs); #使用exec函数进行INSERT,UPDATE,DELETE,结果返回受影响的行数 $sql = 'INSERT INTO user (`userName`, `userPassword`, `userAge`) SELECT (MAX(userId) + 1), \'123456\', 18 FROM user'; //插入一行用户数据,其中userName使用userId最大值+1 // $rs = $dbh->exec($sql); // var_dump($rs) . '<br>'; #使用prepareStatement进行CURD $sql = 'SELECT * FROM user WHERE userId = ?'; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $userId); //绑定第一个参数值 $userId = 1; $stmt->execute(); $stmt->setFetchMode(PDO::FETCH_ASSOC); $rs = $stmt->fetchAll(); var_dump($rs); #使用事务 try { $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //设置错误模式,发生错误时抛出异常 $dbh->beginTransaction(); $sql1 = 'SELECT bookNum FROM book WHERE bookId = ? FOR UPDATE'; //此处加上行锁,可以对bookNum做一些判断,bookNum>1,才做下一步更新操作 $sql2 = 'UPDATE book SET bookNum=bookNum-1 WHERE bookId = ?'; //加上行锁后,如果user1在买书,并且user1的买书过程没有结束,user2就不能执行SELECT查询书籍数量的操作,这样就保证了不会出现只有1本书,却两个人同时买的状况 $stmt1 = $dbh->prepare($sql1); $stmt2 = $dbh->prepare($sql2); $stmt1->bindParam(1, $userId); $stmt2->bindParam(1, $userId); $userId = 1; $stmt1->execute(); $stmt2->execute(); $dbh->commit(); } catch(Exception $e) { $dbh->rollBack(); die('Transaction Error Message: ' . $e->getMessage()); } ?>
相关推荐
查询操作主要是PDO::query()、PDO::exec()、PDO::prepare()。PDO::query()主要是用于有记录结果返回的操作,特别是SELECT操作,PDO::exec()主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、...
计算机后端-PDO10PDO对象的exec方法.avi
PDO->beginTransaction() — 标明回滚起始点 PDO->commit() — 标明回滚结束点,并执行SQL PDO->__construct() — 建立一个PDO 链接数据库的实例 PDO->errorCode() — 获取错误码 PDO->errorInfo() — 获取错误的...
计算机后端-PDO11PDO对象的query方法.avi
PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的php_mysql.dll之类的了,那怎么办捏,我们只有...
PDO::exec PDO::exec — 执行一条 SQL 语句,并...对于在程序中只需要发出一次的 SELECT 语句,可以考虑使用PDO::query()。 参数说明: statement :要被预处理和执行的SQL 语句。 返回值 PDO::exec()返回受
单条查询不需要启用事务处理,并且不需要使用PDO的预处理方式,但注意要使用$pdo->quote()方法来自动将字符型变量值的字符中首尾加上单引号,以防止SQL注入,并且免去特殊符号转义的过程。 <?php $db_type='mysql';...
php_pdo_oci.dll支持PHP的各个版本 用于php连接oracle时,报php_pdo_oci.dll不能正常加载的错误
php5推出的pdo统一数据接口,为了方便数据的分页写的pdo分页类。
PHP的PDO连接SQLSERVER: 含全套工具: php5.4_x86_nts安装包 微软的SQLSRV拓展 微软的odbc驱动msodbcsql.msi 微软的sql客户端sqlncli.msi 配置好的php.ini 具体安装说明(原创亲测) 说实话这个得来很不容易,整整一天...
PDO::inTransaction — 检查是否在一个事务内(PHP 5 >= 5.3.3, Bundled pdo_pgsql) 说明 语法 bool PDO::inTransaction ( void ) 检查驱动内的一个事务当前是否处于激活。此方法仅对支持事务的数据库驱动起作用。 ...
不错的教程。用PHP的PDO来连接SQLITE 3
本文实例讲述了php使用PDO下exec()函数查询执行后受影响行数的方法。分享给大家供大家参考,具体如下: exec()方法返回执行后受影响的行数。 语法:int PDO::exec(string statement) 提示:...
php pdo类封装,单例模式,多种操作方式,预处理,事务
php采用ms官方扩展pdo方式连接高版本mssql需要sqlncli,具体例子参看本博客。
PHP的PDO类教程,收集了php 使用pdo操作教程
PHP7.3的sql server PDO_DBLIB库
PHP PDO函数简介
在 PDO 中, 事务已经显得非常简单. 下面一个基本的例子, 演示了向 SQLite 数据库插入 1000000 条数据, 并且在出错的时候回滚. 复制代码 代码如下: try { $conn = new PDO(‘sqlite:Transactioion.s3db’); $conn->...