导航:首页 > 编程语言 > phppdo好处

phppdo好处

发布时间:2022-09-02 00:26:13

php使用pdo连接数据库时,其中有个属性是长连接,请问设置了这个属性有啥好处与坏处

如果操作这个数据的人不多,并你进行长连接的连接资源使用很频繁的话使用长连接。这样速度比较快。

顾名思义,长连接就是一直连接从未断开。你应该清楚数据库连接有的是限定连接个数的。你一直连接就占用了一个连接资源。如果连接这个数据库的人不多的话,这样没问题,还能加快速度,你每次操作数据库的时候不用在进行连接操作。这样会加快效率。

如果这个数据库使用的人比较多的话,最好使用短链接,这样用完就释放。不会一直占着连接资源。导致其他人想用都连接不上。

⑵ 请简述PHP中的PDO扩展的作用是什么。 (1分)

PDO一是PHP数据对象(PHP Data Object)的缩写。

并不能使用PDO扩展本身执行任何数据库操作,必须使用一个database-specific PDO driver(针对特定数据库的PDO驱动)访问数据库服务器。
PDO并不提供数据库抽象,它并不会重写SQL或提供数据库本身缺失的功能,如果你需要这种功能,你需要使用一个更加成熟的抽象层。
PDO需要PHP5核心OO特性的支持,所以它无法运行于之前的PHP版本。

⑶ php中的pdo是什么

PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用。

⑷ Php中的pdo是什么意思啊举个例子指点迷津!

就是操作数据库的方法,
pdo就是把操作数据库的函数封装成一个pdo类,其间做了安全验证而已。
在使用PDO之前首先要设置PHP.INI文件,使PHP支持PDO,因为PHP5默认是不支持的。在PHP安装目录下找到PHP.INI文件,打开并搜索extension=php_pdo.dll 和 extension=php_pdo_mysql.dll,将前面的分号(;)去掉,重启apache即可。
接下来我们就开始写PHP代码了,首先是连接数据库,看下面的例子:
<!--?php
define('DB_NAME', 'pdo_test');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
try {
$DBH = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);
$DBH--->exec('SET CHARACTER SET '.DB_CHARSET);
$DBH->exec('SET NAMES '.DB_CHARSET);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br>";
die();
}
?>
连接成功后,我们需要对数据库中的数据进行增删改查操作,这里主要用到exec和query两个函数。

示例:
<!--?php
//增加数据
$sql_insert = 'Insert INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,'.time().rand(1,100).','.time().rand(1,100).',\'no\')';
$back = $DBH--->exec($sql_insert); //返回 bool 的true or fal
$lastInsertId = $DBH->lastInsertId();
//删除数据
$sql_delete = 'Delete FROM wp_options Where option_id='.$lastInsertId;
$back = $DBH->exec($sql_delete); //返回 bool 的true or fal
$lastInsertId = $DBH->lastInsertId();
//更新数据
$sql_update = 'Update wp_options SET option_name = \''.time().rand(1,100).'\' Where option_id='.$lastInsertId;
$lastUpdateId = $DBH->lastInsertId(); //返回的对应的操作的id
//查询数据
$sql_select = 'Select option_id FROM wp_options orDER BY option_id DESC LIMIT 4 ';
$back = $DBH->query($sql_select); //返回一个对象 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集
$back = $DBH->query($sql_select)->fetch(); //返回一条数据结果 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集
$back = $DBH->query($sql_select)->fetchAll(); //返回一个数组 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集
$back = $DBH->query($sql_select)->fetchColumn(0); //返回一个字段字符串,这个字符串是返回的记录的第一条记录的第一个字段
?>
到这里,PDO的基本操作基本上结束了。对于一般的企业网站,小型的管理系统基本上能满足了,但是,如果我们开发大型网站或者逻辑较复杂的管理系统,仅仅靠数据的读写是远远不够的,我们可能还需要对数据库的存储过程、事务等对象进行操作,下面我们继续看看用PDO是如何实现的。如果还有更多问题可以去后盾网论坛问题求助专区,希望我的回答对你有帮助!

⑸ PHP+MYSQL(PDO)使用PDO持久连接加预处理查询 是不是无需关闭数据库连接

持久连接的实际用处:假如一个php脚本文件,同时会有多个用户访问该页面。
里面涉及到数据库查询操作。
如果使用非持久连接的话,那么每个用户都会从新建立一个数据库连接。
而持久连接,多个用户访问同一个文件的时候,可以共享一个数据库连接标识。
这样减少了连接次数。

⑹ 为什么 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);

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

⑺ 为什么说PHP必须要用PDO

根据PHP官方计划,PHP6正式到来之时,数据库链接方式统一为PDO。但是总有一小撮顽固分子,趁PHP官方还没正式统一时,还用老式的MYSQL驱动链接数据库。即使现在有部分程序改用Mysqli/pdo,只要没用到预编译,均和老式的Mysql驱动没多大区别。在此,我就不点评国内的PHP生态环境了。
回归主题,为什么说PHP必须要用PDO?除了官方要求之外,我认为作为PHP程序员,只要你目前是做开发的话,那么请选择用PDO的程序/框架!PDO除了安全和万金油式数据库链接,还有一点是我目前觉得非常好用的!下面我就用我最近的切身体会来说。
业务环境:公司某老架构,数据库设计的人员太菜了,设计过程完全没有按照数据库范式进行。各种表中使用大量的序列化形式保存(补充:json同理)。
出现问题:销售的客服反馈,网站某用户在编辑地址时,Mysql报错了。
问题猜想:不用说了。肯定是引号,反斜杠引起序列化入库不正常。

⑻ php中使用pdo连接数据库长连接是啥意思,有什么好处和坏处

不会随着访问结束断开连接

阅读全文

与phppdo好处相关的资料

热点内容
sublime3运行python 浏览:184
怎么把安卓视频传到苹果上面 浏览:79
手机拍鬼片用什么app 浏览:640
爬山虎app是干什么用的 浏览:505
有哪些写给程序员的歌 浏览:49
成都市命令 浏览:993
建立系列文件夹 浏览:983
苹果开机白屏带文件夹问号 浏览:733
体验服为什么服务器会关闭 浏览:41
酒店命令 浏览:750
中走丝线切割编程视频 浏览:80
衣服压缩袋手泵原理 浏览:714
通达信编程书籍 浏览:981
车用压缩天然气瓶阀 浏览:971
鞋的程序员 浏览:259
车的压缩比是什么意思 浏览:202
网站源码怎么传到文件夹 浏览:914
海南压缩机在哪里 浏览:491
电脑文件夹清晰的文件结构 浏览:839
如何把苹果手机的app转到安卓 浏览:305