当前位置:首页 » 操作系统 » 数据库pdo

数据库pdo

发布时间: 2022-04-29 10:04:44

⑴ 为什么 php 应该使用 PDO 方式访问数据库

很多程序员都学习过如何使用 Mysql 或 MySQLi 扩展访问数据库。在 PHP 5.1 中,有一个更好的方法。PHP Data Objects(PDO) 提供了很多预处理语句的方法,且使用对象将使你的工作更有成效!

PDO 介绍

“PDO – PHP Data Objects – 是一个对多种数据库提供统一操作方法的数据库访问层。”

它并不具备数据库特有的语法,但它将使切换数据库和平台更加容易,多数情况下,只需要简单修改链接字符串。

这并非一篇完整教导如何使用SQL的教程。它重要为那些现今仍在使用 mysql 或 mysqli 扩展的人,帮助他们跃至更具可移植性和强力的 PDO。


数据库支持

此扩展可以使用 PDO 驱动编写过的所有数据库。在本文书写时,下面的数据库支持已经实现:


PDO_DBLIB ( FreeTDS / Microsoft SQL Server / Sybase )

PDO_FIREBIRD ( Firebird/Interbase 6 )

PDO_IBM ( IBM DB2 )

PDO_INFORMIX ( IBM Informix Dynamic Server )

PDO_MYSQL ( MySQL 3.x/4.x/5.x )

PDO_OCI ( Oracle Call Interface )

PDO_ODBC ( ODBC v3 (IBM DB2, unixODBC and win32 ODBC) )

PDO_PGSQL ( PostgreSQL )

PDO_SQLITE ( SQLite 3 and SQLite 2 )

PDO_4D ( 4D )

你的系统不会也不必支持所有上面的驱动;下面是一个快速检查所支持数据库的方法:


1 print_r(PDO::getAvailableDrivers());

连接

不同数据库的连接方法可能稍有不同,下面是一些较为流行的数据库连接方法。你将注意到,虽然数据库类型不同,前三种数据库的连接方式是相同的——而 SQLite 使用自己的语法。


Connection String

01 try {

02 # MS SQL Server andSybase with PDO_DBLIB

03 $DBH = newPDO("mssql:host=$host;dbname=$dbname, $user, $pass");

04 $DBH = newPDO("sybase:host=$host;dbname=$dbname, $user, $pass");

05

06 # MySQL with PDO_MYSQL

07 $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

08

09 # SQLite Database

10 $DBH = newPDO("sqlite:my/database/path/database.db");

11 }

12 catch(PDOException $e) {

13 echo$e->getMessage();

14 }

注意 try/catch 块——你应该总是使用 try/catch 包装你的 PDO 操作,并使用异常机制——这里只是简单的示例。通常,你只需要一个连接——有很多可以教你语法的列表。 $DBH 代表“数据库句柄”,这将贯穿全文。


通过将句柄设置为 NULL,你可以关闭任一连接。


1 # close the connection

2 $DBH = null;

你可以在PHP.net找到更多数据库特定选项和/或其它数据库连接字符串的信息。


异常与 PDO

PDO 可以使用异常处理错误,这意味着你的所有 PDO 操作都应当包装在一个 try/catch 块中。你可以通过设定错误模式属性强制 PDO 在新建的句柄中使用三种错误模式中的某一个。下面是语法:


1 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );

2 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

3 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

无论你设定哪个错误模式,一个错误的连接总会产生一个异常,因此创建连接应该总是包装在 try/catch 块中。


PDO::ERRMODE_SILENT

这是默认的错误模式。如果你使用这个模式,你将得使用同 mysql 或 mysqli 扩展一样的方法差错。其它两种模式更适合 DRY 编程


PDO::ERRMODE_WARNING

此方法将会发出一个标准PHP警告,并允许程序继续运行。这对调试很有帮助。


PDO::ERRMODE_EXCEPTION

这是多数情况下你所希望的方式。它生成异常,允许你更容易的处理错误,隐藏可能导致它人了解你系统的信息。下面是一个充分利用异常的示例:


01 # connect to the database

02 try {

03 $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

04 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

05

06 # UH-OH! Typed DELECT instead of SELECT!

07 $DBH->prepare('DELECT name FROM people');

08 }

09 catch(PDOException $e) {

10 echo"I'm sorry, Dave. I'm afraid I can't do that.";

11 file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);

12 }

在 select 语句中有一个故意留下的错误;这将导致一个异常。异常错误细节保存至一个 log 文件,并生成一段友好的(或不怎么友好的)信息于用户。


插入和更新

插入新数据,更新已存数据是一种非常常见的数据库操作。使用 PDO,这通常需要两个步骤。本节中所述的所有内容对更新和插入都有效。

这里有一个最基本的插入示例:


1 # STH means "Statement Handle"

2 $STH = $DBH->prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");

3 $STH->execute();

你也可以使用 exec() 完成相同的操作,这将减少调用。多数情况下,你会使用调用多的方法,以充分利用语句预处理的优势。即使你只用它一次,使用语句预处理,帮助你保护你的 SQL 免于注入攻击。


预处理语句

使用语句预处理将帮助你免于SQL注入攻击。


一条预处理语句是一条预编译的 SQL 语句,它可以使用多次,每次只需将数据传至服务器。其额外优势在于可以对使用占位符的数据进行安全处理,防止SQL注入攻击。


你通过在 SQL 语句中使用占位符的方法使用预处理语句。下面是三个例子:一个没有占位符,一个使用无名占位符,一个使用命名占位符。


1 # no placeholders - ripe for SQL Injection!

2 $STH = $DBH->("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");

3

4 # unnamed placeholders

5 $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);

6

7 # named placeholders

8 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

你希望避免第一种方法。选择命名我无名占位符将会对你对语句中数据的设置产生影响。


无名占位符

01 # assign variables to each place holder, indexed 1-3

02 $STH->bindParam(1, $name);

03 $STH->bindParam(2, $addr);

04 $STH->bindParam(3, $city);

05

06 # insert one row

07 $name = "Daniel"

08 $addr = "1 Wicked Way";

09 $city = "Arlington Heights";

10 $STH->execute();

11

12 # insert another row with different values

13 $name = "Steve"

14 $addr = "5 Circle Drive";

15 $city = "Schaumburg";

16 $STH->execute();

这里有两步。首先,我们对各个占位符指定变量(2-4行)。然后,我们对各个占位符指定数据,并执行语句。要发送另一组数据,只需改变这些变量的值并再次执行语句。


这种方法看上去对拥有很多参数的语句很笨拙吧?的确。然而,当数据保存于数组中时,这非常容易简略:


1 # the data we want to insert

2 $data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');

3

4 $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);

5 $STH->execute($data);

容易吧!


数组中的数据按顺序填入占位符中。 $data[0]是第一个,$data[1]是第二个,依次。不过,要是数组中数据的次序不正确,这将不能正常运行,你需要先对数组排序。


命名占位符

你可能已经开始猜测语法了,不过下面就是示例:


1 # the first argument is the named placeholder name - notice named

2 # placeholders always start with a colon.

3 $STH->bindParam(':name', $name);

你可以看使用快捷方式,但它需使用关联数组。下面是示例:


1 # the data we want to insert

2 $data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' );

3

4 # the shortcut!

5 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

6 $STH->execute($data);

数组中的键不需要以冒号开头,但其它部分需要同占位符匹配。如果你有一个二维数组,你只需遍历它,并对遍历的每个数组执行语句。


命名占位符的另一个好的功能是直接将对象插入到你的数据库中,只要属性同命名字段匹配。下面是一个示例对象,以及如何将它插入到数据库中的示例:


01 # a simple object

02 class person {

03 public $name;

04 public $addr;

05 public $city;

06

07 function __construct($n,$a,$c) {

08 $this->name = $n;

09 $this->addr = $a;

10 $this->city = $c;

11 }

12 # etc ...

13 }

14

15 $cathy = new person('Cathy','9 Dark and Twisty','Cardiff');

16

17 # here's the fun part:

18 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

19 $STH->execute((array)$cathy);

通过在执行时将对象转换为数组,输将将会同数组的键一样对待。

⑵ PDO访问数据库有什么优点

1:PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库,如果代码封装好了以后,应用层调用基本上差不多的,当后端数据库更换了以后,应用层代码基本不用修改.
2:PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的.
3:PDO是PHP官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级.
4:PDO可以防止SQL注入,确保数据库更加安全

⑶ PHP实现的pdo连接数据库并插入数据功能简单示例

本文实例讲述了PHP实现的pdo连接数据库并插入数据功能。分享给大家供大家参考,具体如下:
创建配置文件
pdo_config.php
<?php
$db_Type
=
"mysql";//数据库类型
$host
=
"localhost";//主机名
$dbName
=
"test";//数据库名
$userName
=
"root";//用户名
$password
=
"root";//密码
$dsn
=
"{$db_Type}:host={$host};dbname={$dbName}";
?>
pdo插入数据库
pdo_insert.php
<?php
header('Content-type:text/html;
charset=utf-8');
require
'pdo_config.php';
try{
$pdo
=
new
PDO
($dsn,$userName,$password);//创建一个连接对象
$pdo->exec('set
names
utf8');//设置编码
$sql
=
"INSERT
student
(name,email)
VALUES
('李四','[email protected]')";
$pdo->exec($sql);
}catch
(PDOException
$e){
die('操作失败'.$e->getMessage());
}
//关闭连接
$pdo
=
null;
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:关于php连接mssql:pdo
odbc
sql
serverPHP5中使用PDO连接数据库的方法PHP中PDO连接数据库中各种DNS设置方法小结ThinkPHP框架基于PDO方式连接数据库操作示例PHP使用ODBC连接数据库的方法tp5(thinkPHP5)框架连接数据库的方法示例PHP7使用ODBC连接SQL
Server2008
R2数据库示例【基于thinkPHP5.1框架】tp5(thinkPHP5)操作mongoDB数据库的方法thinkPHP5实现数据库添加内容的方法tp5(thinkPHP5)框架数据库Db增删改查常见操作总结PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】

⑷ 使用pdo连接数据库但是运行后说没有找到pdo是怎么回事

您好,您没弄好,再弄一次:
1、PDO配置。打开php.ini配置文件,找到下图所示的配置信息,去掉要启用的PDO前面的“#”号即可。另外一种方式是直接在启动的wampserver中找到php扩展中的php_pdo_db.lib选项,重启wampserver服务器即可。
2、如何利用PDO连接数据库。利用下面这条简单的语句即可连接数据库,$pdo = newPDO("mysql:host=localhost;dbname=php100","root",“ ");
3、PDO中常用的函数及其解释如下。
PDO::query()主要是用于有记录结果返回的操作,特别是SELECT操作

PDO::exec()主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作

PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID

PDOStatement::fetch()是用来获取一条记录

PDOStatement::fetchAll()是获取所有记录集到一个中 。

4、
下面通过一个简单的php代码示例来具体介绍如何使用PDO进行数据库操作。

<?php

//连接数据库
$pdo = new PDO("mysql:host=localhost; dbname=member", "root","");

//在表user_list中插入数据
$pdo->exec("insert into user_list(uid, m_id, username, password) values(null,'3','testpdo','testpdo')");

//使用查询语句
$sr = $pdo->query("select * from user_list");

//将查询的结果循环输出显示
while($row=$sr->fetch()){
print_r($row);
}

?>

⑸ pdo是什么意思

PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口。PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数,基于数据库使用的安全性,因为后者欠缺对于SQL注入的防护。

PHP 数据对象(PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。 注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个具体数据库的 PDO 驱动来访问数据库服务。

相关信息:

PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO不提供数据库抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。

从 PHP 5.1开始附带了 PDO,在 PHP 5.0 中是作为一个 PECL 扩展使用。 PDO 需要PHP 5核心的新OO特性,因此不能在较早版本的 PHP 上运行。

⑹ PHP使用pdo连接access数据库并循环显示数据操作示例

本文实例讲述了PHP使用pdo连接access数据库并循环显示数据操作。分享给大家供大家参考,具体如下:
PDO连接与查询:
try
{
$conn
=
new
PDO("odbc:driver={microsoft
access
driver
(*.mdb)};
dbq=".realpath("MyDatabase.mdb"))
or
die("链接错误!");
//echo
"链接成功!";
}
catch(PDOException
$e){
echo
$e->getMessage();
}
$sql
=
"select
*
from
users";
1.
foreach()方法
foreach
($conn->query($sql)
as
$row)
{
$row["UserID"];
$row["UserName"];
$row["UserPassword"];
}
2.
while()方法
$rs
=
$conn->query($sql);
$rs->setFetchMode(PDO::FETCH_NUM);
while($row=$rs->fetch()){
$row[0];
$row[1];
$row[2];
}
php使用PDO抽象层获取查询结果,主要有三种方式:
(1)PDO::query()查询。
看下面这段php代码:
<?php
//PDO::query()查询
$res
=
$db->query('select
*
from
user');
$res->setFetchMode(PDO::FETCH_NUM);
//数字索引方式
while
($row
=
$res->fetch()){
print_r($row);
}
?>
(2)PDO->exec()处理sql
<?php
//PDO->exec()处理sql
$db->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$res
=
$db->exec("insert
into
user(id,name)
values('','php点点通')");
echo
$res;
?>
(3)PDO::prepare()预处理执行查询
<?php
//PDO::prepare()预处理执行查询
$res
=
$db->prepare("select
*
from
user");
$res->execute();
while
($row
=
$res->fetchAll())
{
print_r($row);
}
?>
setAttribute()
方法是设置属性,常用参数如下:
PDO::CASE_LOWER
--
强制列名是小写
PDO::CASE_NATURAL
--
列名按照原始的方式
PDO::CASE_UPPER
--
强制列名为大写
setFetchMode方法来设置获取结果集的返回值的类型,常用参数如下:
PDO::FETCH_ASSOC
--
关联数组形式
PDO::FETCH_NUM
--
数字索引数组形式
PDO::FETCH_BOTH
--
两者数组形式都有,这是默认的
PDO::FETCH_OBJ
--
按照对象的形式,类似于以前的
mysql_fetch_object()
对上面总结如下:
查询操作主要是PDO::query()、PDO::exec()、PDO::prepare()。
PDO->query()

处理一条SQL语句,并返回一个“PDOStatement”
PDO->exec()

处理一条SQL语句,并返回所影响的条目数
PDO::prepare()主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句
最后介绍两个常用的函数:
(1)fetchColumn()获取指定记录里一个字段结果,默认是第一个字段!
<?php
$res
=
$db->query('select
*
from
user');
//获取指定记录里第二个字段结果
$col
=
$res->fetchColumn(1);
echo
$col;
?>
(2)fetchAll(),从一个结果集中获取数据,然后存放在关联数组中
<?php
$res
=
$db->query('select
*
from
user');
$res_arr
=$res->fetchAll();
print_r($res_arr);
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《php+Oracle数据库程序设计技巧总结》、《PHP+MongoDB数据库操作技巧大全》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:PHP使用PDO连接ACCESS数据库PHP数据库链接类(PDO+Access)实例分享php中mysql连接方式PDO使用详解关于php连接mssql:pdo
odbc
sql
serverPhp中用PDO查询Mysql来避免SQL注入风险的方法php中在PDO中使用事务(Transaction)全新的PDO数据库操作类php版(仅适用Mysql)php使用pdo连接并查询sql数据库的方法php使用pdo连接mssql
server数据库实例PHP实现PDO的mysql数据库操作类

⑺ php连接wamp下的mysql数据库,PDO报错

这个是数据库用户权限配置不对,查一下你数据库的版本和平台,。Linux平台和windows平台的修改方法不太一样,不过都要登陆到mysql的后台,用root用户来修改,修改后重新启动mysql服务。
对于这种Php的访问, 建议创建一个普通用户,不要用root直接连接,root一般是管理员的身份,权限过于大,而在编码中会露出它的密码,是一个不好的习惯。

⑻ pdo,mysqli,mysql这三种操作数据库的方法,具体有哪些差异

pdo(推荐使用)
支持面向对象的方式处理各种数据库类型(如:mysql、oracle、db2等),也就是说pdo是可以跨数据库类型的

如果系统更换数据源
,可以只修改PDO
接口就可以了
mysql
只支持面向过程的方式处理mysql数据库,是早期
使用的接口
高版本的将不在支持。仅支持mysqli
mysqli
既支持面向对象的方式处理mysql数据库,也保留了面向过程的处理方式.
推荐使用。
因为具有更高的效率和更低的内存使用率

⑼ PHP如何使用PDO连接数据库

$pdo = new PDO(string $dsn,string $username,string $password);
解释
⑴$dsn:数据源名,全称date source name,包含了请求连接到数据库的信息
Mysql示例:$dsn="mysql:host=localhost;dbname=要连接的数据库库名";
⑵$username:用户名,默认为root
⑶$password:密码,默认为空(注意:就算密码为空,在连接PDO的时候,也需要用""空内容的双引号去书写)

热点内容
google访问ip 发布:2024-10-04 23:19:28 浏览:51
陕西税票服务器地址 发布:2024-10-04 23:04:23 浏览:16
2014访问学者 发布:2024-10-04 22:59:37 浏览:917
c质数的算法 发布:2024-10-04 22:58:32 浏览:521
三星的浏览器在哪个文件夹 发布:2024-10-04 22:57:05 浏览:987
连接line的服务器地址 发布:2024-10-04 22:57:01 浏览:181
衣柜门尺寸简单算法 发布:2024-10-04 22:56:54 浏览:722
有什么软件可以清理缓存垃圾 发布:2024-10-04 22:55:24 浏览:755
手机电脑中配置是指的什么 发布:2024-10-04 22:53:53 浏览:156
扩容数据存储的优势 发布:2024-10-04 22:51:37 浏览:643