PHP pdo学习笔记,转自菜鸟教程
来源:互联网 发布:怎么搜索网络的打印机 编辑:程序博客网 时间:2024/06/06 02:48
PHPpdo总结
PDO 和所有主要的驱动作为共享扩展随 PHP 一起发布,要激活它们只需简单地编辑 php.ini 文件,并添加以下扩展:
extension=php_pdo.dll
然后就说各种数据库扩展,也需要php的一
;extension=php_pdo_firebird.dll;extension=php_pdo_informix.dll;extension=php_pdo_mssql.dll;extension=php_pdo_mysql.dll;extension=php_pdo_oci.dll;extension=php_pdo_oci8.dll;extension=php_pdo_odbc.dll;extension=php_pdo_pgsql.dll;extension=php_pdo_sqlite.dll
PDO连接MySql数据库
<?php$dbms='mysql'; //数据库类型$host='localhost'; //数据库主机名$dbName='test'; //使用的数据库$user='root'; //数据库连接用户名$pass=''; //对应的密码$dsn="$dbms:host=$host;dbname=$dbName";try { $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象 echo "连接成功<br/>"; /*你还可以进行一次搜索操作 foreach ($dbh->query('SELECT * from FOO') as $row) { print_r($row); //你可以用 echo($GLOBAL); 来看到这些值 } */ $dbh = null;} catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>");}//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));// 现在运行完成,在此关闭连接$dbh = null;?>
持久化连接
<?php$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array( PDO::ATTR_PERSISTENT => true));?>
PHP PDO 事务与自动提交
<?phptry { $dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2', array(PDO::ATTR_PERSISTENT => true)); echo "Connected\n";} catch (Exception $e) { die("Unable to connect: " . $e->getMessage());}try { $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')"); $dbh->exec("insert into salarychange (id, amount, changedate) values (23, 50000, NOW())"); $dbh->commit();} catch (Exception $e) { $dbh->rollBack(); echo "Failed: " . $e->getMessage();}?>
用预处理语句进行重复插入
下面例子通过用 name 和 value 替代相应的命名占位符来执行一个插入查询
<?php$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");$stmt->bindParam(':name', $name);$stmt->bindParam(':value', $value);// 插入一行$name = 'one';$value = 1;$stmt->execute();// 用不同的值插入另一行$name = 'two';$value = 2;$stmt->execute();?>
用预处理语句进行重复插入
下面例子通过用 name 和 value 取代 ? 占位符的位置来执行一条插入查询。
<?php$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");$stmt->bindParam(1, $name);$stmt->bindParam(2, $value);// 插入一行$name = 'one';$value = 1;$stmt->execute();// 用不同的值插入另一行$name = 'two';$value = 2;$stmt->execute();?>
使用预处理语句获取数据
下面例子获取数据基于键值已提供的形式。用户的输入被自动用引号括起来,因此不会有 SQL 注入攻击的危险。
<?php$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");if ($stmt->execute(array($_GET['name']))) { while ($row = $stmt->fetch()) { print_r($row); }}?>
如果数据库驱动支持,应用程序还可以绑定输出和输入参数.输出参数通常用于从存储过程获取值。输出参数使用起来比输入参数要稍微复杂一些,因为当绑定一个输出参数时,必须知道给定参数的长度。如果为参数绑定的值大于建议的长度,就会产生一个错误。
带输出参数调用存储过程
<?php$stmt = $dbh->prepare("CALL sp_returns_string(?)");$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); // 调用存储过程$stmt->execute();print "procedure returned $return_value\n";?>
还可以指定同时具有输入和输出值的参数,其语法类似于输出参数。在下一个例子中,字符串”hello”被传递给存储过程,当存储过程返回时,hello 被替换为该存储过程返回的值。
带输入/输出参数调用存储过程
<?php$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");$value = 'hello';$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); // 调用存储过程$stmt->execute();print "procedure returned $value\n";?>
占位符的无效使用
<?php$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");$stmt->execute(array($_GET['name']));// 占位符必须被用在整个值的位置$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");$stmt->execute(array("%$_GET[name]%"));?>
PDO 类:
PDO::beginTransaction — 启动一个事务PDO::commit — 提交一个事务PDO::__construct — 创建一个表示数据库连接的 PDO 实例PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATEPDO::errorInfo — 返回最后一次操作数据库的错误信息PDO::exec — 执行一条 SQL 语句,并返回受影响的行数PDO::getAttribute — 取回一个数据库连接的属性PDO::getAvailableDrivers — 返回一个可用驱动的数组PDO::inTransaction — 检查是否在一个事务内PDO::lastInsertId — 返回最后插入行的ID或序列值PDO::prepare — 备要执行的SQL语句并返回一个 PDOStatement 对象PDO::query — 执行 SQL 语句,返回PDOStatement对象,可以理解为结果集PDO::quote — 为SQL语句中的字符串添加引号。PDO::rollBack — 回滚一个事务PDO::setAttribute — 设置属性
PDOStatement 类:
PDOStatement::bindColumn — 绑定一列到一个 PHP 变量PDOStatement::bindParam — 绑定一个参数到指定的变量名PDOStatement::bindValue — 把一个值绑定到一个参数PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。PDOStatement::columnCount — 返回结果集中的列数PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATEPDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息PDOStatement::execute — 执行一条预处理语句PDOStatement::fetch — 从结果集中获取下一行PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。PDOStatement::fetchObject — 获取下一行并作为一个对象返回。PDOStatement::getAttribute — 检索一个语句属性PDOStatement::getColumnMeta — 返回结果集中一列的元数据PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数PDOStatement::setAttribute — 设置一个语句属性PDOStatement::setFetchMode — 为语句设置默认的获取模式。
阅读全文
0 0
- PHP pdo学习笔记,转自菜鸟教程
- PHP PDO 学习笔记
- PHP PDO 学习笔记
- PHP PDO 学习笔记
- PHP PDO 学习笔记
- PHP PDO学习笔记
- PHP PDO 学习笔记
- PHP PDO 学习笔记
- PHP PDO 学习笔记
- php pdo学习笔记
- PHP PDO基础认知和学习笔记
- php学习笔记之PDO异常处理
- php学习笔记之PDO预处理
- [php学习笔记]PDO类操作数据库
- PHP学习笔记:PDO连接MySQL
- servlet学习菜鸟教程笔记
- React菜鸟教程学习笔记
- HTML菜鸟教程学习笔记
- 沃通SSL证书正常销售,不受谷歌和火狐影响
- 创建scrapy开发环境
- 使用Map代替实体类,实现ssm框架下的增删改查
- Tesseract-OCR 字符识别---样本训练
- Java中的线程池(JDK7)
- PHP pdo学习笔记,转自菜鸟教程
- Spark Streaming如何使用checkpoint容错
- 哇呀呀呀呀呀呀有
- Python列表元组讲解
- Linux进程全解9——进程状态、system函数、进程间的关系
- Dev_C++使用
- php和MySQL的那些事
- Duilib Button贴图
- C++排序算法之快速排序