来自 美高梅4858官方网站 2019-11-09 12:07 的文章
当前位置: 美高梅4858官方网站 > 美高梅4858官方网站 > 正文

PHP中PDO基础教程

明早写个soap实例,接受无wsdl形式。wsdl格局明儿上午在写。
先写个user类,用pdo链接mysql。
user.php

PDO是PHP 5新参预的一个要害意义,因为在PHP 5从前的php4/php3都是一群的数据库扩大来跟各种数据库的总是和拍卖,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等扩张来三番两次MySQL、PostgreSQL、MS SQL Server、SQLite,相同的,大家必得依赖ADOdb、PEA凯雷德::DB、PHPlib::DB之类的数据库抽象类来赞助大家,无比繁琐和无效,毕竟,php代码的效率怎可以够大家直接用C/C++写的扩张斜率高捏?所以嘛,PDO的面世是迟早的,大家要安静学习的心怀去选用使用,恐怕你会开采可以裁减你不菲武术哦。

  1. /**
  2. *this is a user class
  3. *@author:guqin
  4. *
  5. */
  6. class User{
  7. private $db = NULL;
  8. private $name = 'root';
  9. private $pwd = '123456';
  10. private $dns;
  11. public function __construct(){
  12. $this->dsn = "mysql:host=localhost;dbname=zf";
  13. try{
  14. $this->db = new PDO($this->dsn,$this->name,$this->pwd);
  15. }catch(PDOException $e){
  16. echo 'Connection failed: ' . $e->getMessage();
  17. }
  18. }
  19. public function getUser(){
  20. $sql = "SELECT name FROM user";
  21. foreach($this->db->query($sql) as $row){
  22. $result[] = $row;
  23. }
  24. return $result;
  25. }
  26. public function addUser($name,$pwd){
  27. $sql = "INSERT INTO user (name,password) values ('$name','$pwd')";
  28. $count = $this->db->exec($sql);
  29. if($count>0){
  30. return true;
  31. }else{
  32. return false;
  33. }
  34. }
  35. public function getUserById($id){
  36. $sql = "SELECT name FROM user WHERE id >?";
  37. $handle = $this->db->prepare($sql);
  38. $handle->execute(array("$id"));
  39. $result = $handle->fetchAll();
  40. return $result;
  41. }
  42. }

安装PDO
本人是在Windows XP SP2 上边,所以嘛,整个经过都以在Windows行进行的啊,至于Linux/FreeBSD 等平台,请自行检索资料设置安装。
作者的是PHP 5.1.4,已经自带有了php_pdo.dll的扩展,可是必要有个别设置一下才具采纳。
打开 c:windowsphp.ini ,这是本人的PHP配置文件,找到上边那行:
extension_dir

server.php

以此正是我们扩充存在的目录,笔者的PHP 5扩大是在:C:php5ext,那么自个儿就把那行改成:

  1. /**
  2. *this is a soap server test
  3. *@author:guqin
  4. *
  5. */
  6. require_once('./user.php');
  7. $server = new SoapServer(null,array('uri'=>''));
  8. $server->setClass('User');
  9. $server->handle();

复制代码 代码如下:

client.php

extension_dir = "C:/php5/ext"

  1. /**
  2. *this is a soap client test
  3. *@author:guqin
  4. *
  5. */
  6. $client = new SoapClient(null,array('location'=>'');
  7. $result = $client->getUser();
  8. print_r($result);
  9. $r = $client->getUserById(46);
  10. print_r($r);
  11. if($client->addUser('k6','88')){
  12. echo "ok";
  13. }
  14. ?>

下一场再往php.ini下边找到:

通过

复制代码 代码如下:

php webservices之soap篇

May 14, 2008 webservices No Comments

就要做个网址,平台架构是lamp的,用到drupal框架开拓,数据意气风发部分要webservices获得和地方mysql存取,用到memcached和google api。所以近日在学习webservices。今后网址和网址之间的相互越来越频仍,用webservices能够减轻数量分享,跨平台,跨语言,网址服务和分布式网址等主题素材。
webservices当前有两种缓和方案:soap,rest,xmlrpc。
自己决定在类型中用soap来做webservices那块,明天就讲讲对soap的掌握,剩下二种今后在讲。先介绍点资料。供我们学习。
soap简介
soap在php中付出有三种,php5 soap,pear soap,nusoap,第一中用c写的,速度极快。后二种用php写的。所以决定用php的soap。在window下支付要张开C:/WINDOWS/php.ini改良下。
extension=php_openssl.dll
extension=php_soap.dll
重启Apache,看下是还是不是soap扶持。
Linux下安装,在编写翻译php时候带上enable-soap。
以下介绍soap使用。
PHP的SOAP扩张能够用来提供和利用Web services。换句话说,PHP开采者可以采取那几个PHP扩张来写他们和睦的Web services,也得以写一些客商带来利用给定的Web services。
SOAP扩大帮忙以下标准。
* SOAP 1.1
* SOAP 1.2
* WSDL 1.1
SOAP扩大主要用以管理RPC格局的Web services。可是,你也能够行使文本情势的WSDL文件合营WSDL形式的服务端和客商端。
其风流倜傥扩充使用 GNOME XML库来拍卖XML。
扩展中的类
这几个扩充落成了6个类。此中有八个高档的类,它们的主意很有用,它们是 SoapClient,SoapServer和SoapFault。此外八个类除此之外构造器外未有别的别的格局,这多个是中低等的类,它们是SoapHeader,SoapParam和SoapVar。
SoapClient类
这几个类用来利用Web services。SoapClient类能够充当给定Web services的顾客端。
它有两种操作格局:
* WSDL 模式
* Non-WSDL 模式
在WSDL情势中,构造器能够选用WSDL文件名作为参数,并从WSDL中领取服务所使用的新闻。
non-WSDL方式中运用参数来传递要选取的音信。那么些类有众多足以用来行使服务的有效的点子。在那之中SoapClient::__soapCall()是最要害的。这几个点子能够用来调用服务中的有些操作。
SoapServer类
这几个类能够用来提供Web services。与SoapClient雷同,SoapServer也可能有二种操作形式:WSDL方式和non-WSDL格局。那二种方式的意思跟 SoapClient的二种情势同样。在WSDL形式中,服务完结了WSDL提供的接口;在non-WSDL格局中,参数被用来保管服务的一颦一笑。
在SoapServer类的无数主意中,有多少个办法相比重要。它们是
SoapServer::setClass(),
SoapServer::addFunction(),
SoapServer::handle()。
SoapServer::setClass()方法设定用来兑现Web Service的类。SoapServer::setClass所设定的类中的全数公共措施将改成Web Services的操作(operation)。
SoapServer::addFunction()方法用来增添贰个或多少个作为Web 瑟维斯s操作(operation)的函数。
SoapServer:: handle()方法提醒Web Service脚本最早拍卖步向的央浼。Web Service脚本是用PHP脚本写的叁个或三个SoapServer对象的实例。固然你能够有不断贰个的SoapServer对象,但平时的习贯是贰个本子只持有贰个SoapServer实例。在调用SoapServer::handle()方法在此以前,Web Service脚本会利用安装在SoapServer对象实例上的别样音讯来拍卖进入的乞求和输出的附和。
SoapFault类
以此类从Exception类世襲而来,能够用来处理错误。SoapFault实例能够抛出或得到Soap错误的连锁新闻并按程序猿的必要处理。
SoapHeader类
本条类能够用来说述SOAP headers。它只是三个只包括构造器方法的数额容器。
SoapParam类
SoapParam也是三个只含有构造器方法的数目容器。这一个艺术能够用来说述传递给Web services操作的参数。在non-WSDL方式中那是一个很有用的类,能够用来传递所梦想格式的参数音讯。
SoapVar类
SoapVar也是叁个只包涵构造器的低等类,与SoapHeader和SoapParam类相仿。这一个类能够用来给叁个Web services操作传递编码参数。这么些类对non-WSDL中传递类型消息是相当实用的。
WSDL VS. non-WSDL模式
Web Services有二种实现格局:公约先行(Contract first)方式和代码先行(Code first)形式。
协议先行形式应用了三个用XML定义的劳动接口的WSDL文件。WSDL文件定义了服务必得得以达成或顾客端必得选拔的接口。SoapServer和SoapClient的WSDL方式就依附那些概念。
在代码先行方式中,首先要先写出落成劳务的代码。然后在大多数场所下,代码会发出一个契约,换种说法,多个WSDL。接着客商端在采纳劳务的时候就足以使用十一分WSDL来拿到劳动的接口。固然如此,PHP5的强盛并未从代码输出多个WSDL的规定,思索到这种情状,能够在non-WSDL方式下接收SoapServer和SoapClient。
SOAP扩展与Hello World
这黄金年代节介绍怎么着行使WSDL形式和non-WSDL情势来促成服务和顾客端。相对来讲,使用WSDL形式来达成劳务和客户端会比较便于,假定已经有八个概念了接口的WSDL文件。因而那焕发青新春会先介绍怎样行使WSDL情势完毕三个Web Service。
在这里个Hello World例子的劳动中有二个被命名字为greet的操作。那一个操作有贰个字符串方式的名字并回到壹个字符串方式的greeting。
WSDL方式服务
上边是WSDL形式的服务所使用的SOAP扩展API代码:
PLAIN TEXTPHP:
function greet($param) {
$retval = ‘Hello ‘.$param;
$result = array(’greetReturn’ => $retval);
return $result;
}
$server = new SoapServer(’hello.wsdl’);
$server->addFunction(’greet’);
$server->handle();
?>
在此个服务的落到实处进度中,函数实现了WSDL所定义的服务操作greet,greet操作有四个WSDL钦定的参数,遵照greet操作的语义,那个参数是叁个顾客的名字。最后handle调用了接触管理央求的劳务对象。
WSDL格局客商端
客商端代码如下
PLAIN TEXTPHP:
try {
$client = new SoapClient(’hello.wsdl’);
$result = $client->__soapCall(’greet’, array(array(’name’ => ‘Sam’)));
printf(”Result = %s/n”, $result->greetReturn);
} catch (Exception $e) {
printf(”Message = %s/n”,$e->__toString());
}
?>
客商端代码中,首先创造七个行使WSDL文件作参数的SoapClient实例。接着__soapCall()调用作为参数字传送入它的操作,也正是greet和扩散操作的参数。
号召和响应
当你将上述的PHP脚本放在你web服务器目录下的文书档案中,并使用WEB浏览器或在PHP深入分析器的命令行调用剧本,客商端发送四个SOAP诉求到服务端脚本,服务端将向顾客端发送三个SOAP响应来响应顾客端的号令。
地点的SOAP音讯都以利用WSDL情势的服务端和客商带来赢得的。也足以利用non-WSDL格局的服务端和客商带给产生与地点同样的SOAP音信。不过,PHP代码必得有好几改观。下大器晚成节会表达怎样行使non-WSDL方式。
non-WSDL情势服务端
PLAIN TEXTPHP:
function greet($param) {
$retval = ‘Hello ‘.$param;
return new SoapParam($retval, ‘greetReturn’);
}
$server = new SoapServer(null, array(’uri’ => ‘));
$server->addFunction(’greet’);
$server->handle();
?>
在non -WSDL形式中,想WSDL格局同样首先落到实处greet函数的功力,但是函数实现的秘籍跟WSDL格局微微有所分化。在non-WSDL情势中,大家必需回到一个SoapParam对象作为响应,并非一个数组。成立服务时,第二个参数设为null,表明未有提供WSDL;接着传递叁个采摘作为参数,那几个选项参数是劳动的UEscortI。最后像WSDL情势相近调用剩下的方法。
non-WSDL方式客户端
PLAIN TEXTPHP:
try {
$client = new SoapClient(null,
array(’location’ => ‘,
‘uri’ => ‘));
$result = $client->__soapCall(’greet’, array(new SoapParam(’Sam’, ‘name’))); printf(”Result = %s/n”, $result);
} catch (Exception $e) {
printf(”Message = %s/n”,$e->__toString());
}
?>
在non-WShDL形式中,因为p未有动用WSDL,传递了多少个包罗服务所在地方和服务UXC60I的参数数组作为参数。然后象WSDL格局中平等调用__soapCall()方法,但是利用了SoapParam类用钦点格式打包参数。重回的结果将获得greet中的响应。
结论
那篇小说介绍了SOAP增添,能够在PHP中通过它来提供和接收Web Services。PHP扩充的舍生取义是它的简要和赶快。使用C写的SOAP增加来运行服务端和顾客端是特别轻巧的。即便SOAP增加在拍卖部分精短的 Web Services时很有用,但是当用它来管理全部的Web Services时就表现出它的局限性。 WSO WSF/PHP就是为着弥补PHP扩大的老毛病而支出的,它是开源的,能够达成SOAP雷同的法力并且支持MTOM,WS-Addressing,WS- Security和WS-RelaiableMessaging。WSO2 WSF/PHP 帮忙与SOAP扩大相仿的API。
那是php soap的生机勃勃部分介绍。作者写的实例后天在贴出。忙着看地震报导。

; Dynamic Extensions ;

php开荒的七种军械之一长生剑pdo

May 13, 2008 php No Comments

现行反革命公司越多用php做开拓,当社会上铸就java的求职者泛滥时,尤其显出phper的要求空缺。后日传授php做web开荒的的八种军器篇,涉及web开拓全经过,以供初读书人学习。
做web开荒超重大的一块时和数据库打交道。所以数据库的连接层很入眼。以往在面向进程开荒时候本身写mysql_connect() 链接数据库,后来友好用类封装mysql_connect(),最终有一点点开源的db类库,如adodb,pdo,pear:db,phplib,mdb等等。自身相比喜欢adodb。不过在zend framework中用的是pdo,只能又用起pdo了。认为pdo也蛮好的。究竟pdo是法定的。前不久以来讲pdo吧,笔者把他列在七种火器之首,长生剑,也露出对那块的溺爱,金朝武侠都垂怜剑。军械首荐吗!
那pdo是什么吗?先看看php manual怎么介绍的,The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP.PHP6中将暗中同意知用PDO连接数据库,全体非PDO扩大将会在PHP6被从扩充中移除。该增加提供PHP内置类 PDO来对数据库进行访问,差异数据库使用相似的情势名,化解数据库连接不联合的难题。
第一:安装PDO
自己这里是WINDOWS下支付用的PDO扩充,php5.1以至以往版本的顺序包里早就带了;php5.0.x则要到pecl.php.net下载,放到你的强盛库,正是PHP所在的公文夹的ext文件夹下;
配置:
改良你的php.ini配置文件,使它扶持pdo.(以前在zend framework开采篇也介绍过的卡塔 尔(英语:State of Qatar)。
把extension=php_pdo.dll后边的分行去掉,
往下还大概有
;extension=php_pdo.dll
;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
各扩大所对应的数据库是:
Driver name Supported databases
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird/Interbase 6
PDO_INFORMIX IBM Informix Dynamic Server
PDO_MYSQL MySQL 3.x/4.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
pdo的类是那般的。
class PDO {
__construct ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )
bool beginTransaction ( void )
bool commit ( void )
string errorCode ( void )
array errorInfo ( void )
int exec ( string $statement )
mixed getAttribute ( int $attribute )
array getAvailableDrivers ( void )
string lastInsertId ([ string $name ] )
PDOStatement prepare ( string $statement [, array $driver_options ] )
PDOStatement query ( string $statement )
string quote ( string $string [, int $parameter_type ] )
bool rollBack ( void )
bool setAttribute ( int $attribute , mixed $value )
}
我们透过上面包车型大巴例证来剖判PDO连接数据库,笔者用的是mysql。

$dbms='mysql'; //数据库类型 Oracle 用ODI,对于开垦者来讲,使用区别的数据库,只要改那么些,不用记住那么多的函数了
$host='localhost'; //数据库主机名
$dbName='test'; //使用的数据库
$user='root'; //数据库连接客户名
$pass=''; //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";
//

try {
$db = new PDO($dsn, $user, $pass); //开头化三个PDO对象,就是成立了数据库连接对象$db
echo "连接成功
“;
/*您还足以拓宽三遍搜索操作
foreach ($dbh->query(’SELECT * FROM user) as $row) {
print_r($row); //你能够用 echo($GLOBAL); 来见到那几个值
}
*/
$db = null;
} catch (PDOException $e) {
die (”Error!: ” . $e->getMessage() . “
“);
}
//私下认可那几个不是长连接,借使急需多少库长连接,要求最后加八个参数:array(PDO::ATT福特Explorer_PEOdysseySISTENT => true) 产生那样:
$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
?>
询问数据,上边大家早已开展了一次查询,大家还足以应用如下的询问:

$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWECRUISER); //设置属性
$rs = $db->query(”SELECT * FROM user”);
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r($result_arr);
?>
上述因为用到setAttribute()方法,放上那四个参数,把字段名强制调换到小写。上边列出多有PDO::setAttribute()的参数:

PDO::ATTR_CASE: 强制列名造成生龙活虎种格式,详细如下(第2个参数):
PDO::CASE_LOWE如虎 CTR 3: 强制列名是小写.
PDO::CASE_NATURAL: 列名根据原本的章程
PDO::CASE_UPPE福特Explorer: 强制列名称叫大写.

PDO::ATTR_E凯雷德RMODE: 错误提示.

PDO::ERRMODE_SILENT: 不显得错误消息,只展现错误码.
PDO::ERRMODE_WARubiconNING: 显示警报错误.
PDO::ERRMODE_EXCEPTION: 抛出相当.

PDO::ATTR_ORACLE_NULLS (不只有是ORACLE有效,别的数据库也使得): 卡塔尔国钦定数据库重返的NULL值在php中对应的数值。

PDO::NULL_NATURAL: 不变.
PDO::NULL_EMPTY_STRING: Empty string is converted to NULL.
PDO::NULL_TO_STRING: NULL is converted to an empty string.
PDO::ATTR_STRINGIFY_FETCHES: Convert numeric values to strings when fetching. Requires bool.

PDO::ATTR_STATEMENT_CLASS: Set user-supplied statement class derived from PDOStatement. Cannot be used with persistent PDO instances. Requires array(string classname, array(mixed constructor_args)).
PDO::ATTR_AUTOCOMMIT (available in OCI, Firebird and MySQL): Whether to autocommit every single statement.

PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (available in MySQL): Use buffered queries.

事例中的$rs->setFetchMode(PDO::FETCH_ASSOC);是PDOStatement::setFetchMode(),对回到类型的宣示。
有如下:
PDO::FETCH_ASSOC — 关联数组格局
PDO::FETCH_NUM — 数字索引数组情势
PDO::FETCH_BOTH — 两者数组方式都有,那是缺省的
PDO::FETCH_OBJ — 根据指标的方式,肖似于早前的 mysql_fetch_object()
插入,更新,删除数据,
$db->exec(”DELETE FROM user where id=1″);
简短的下结论一下方面包车型客车操作:

查询操作主倘诺PDO::query()、PDO::exec()、PDO::prepare()。
PDO::query()主若是用以有记录结果再次来到的操作,特别是SELECT操作,
PDO::exec()首倘若针对未有结果集合再次来到的操作,比方INSERT、UPDATE、DELETE等操作,它回到的结果是日前操作影响的列数。
PDO::prepare()首倘诺预管理操作,必要经过$rs->execute()来试行预管理内部的SQL语句,这些办法可以绑定参数,功效比较强硬,不是本文能够轻易说驾驭的,大家能够参照他事他说加以考察手册和其他文书档案。

获得结果集操作主假使:
PDOStatement::fetchColumn(),
PDOStatement::fetch(),
PDOStatement::fetchALL()。
PDOStatement::fetchColumn() 是获得结果指定第一条记下的某部字段,缺省是率先个字段。
PDOStatement::fetch() 是用来获得一条记下,
PDOStatement::fetchAll()是获得具备记录集到八当中,获取结果能够经过PDOStatement::setFetchMode来设置供给结果集结的花色。

其余有五个不感觉奇的操作,二个是PDO::lastInsertId()和PDOStatement::rowCount()。PDO::lastInsertId()是回来上次布置操作,主键列类型是自增的终极的自增ID。
PDOStatement::rowCount()首借使用以PDO::query()和PDO::prepare()举办DELETE、INSERT、UPDATE操作影响的结果集,对PDO::exec()方法和SELECT操作无效。

事情和自行提交
从那之后,您曾经经过 PDO 连接到了 mysql,在发出查询此前,您应该知道 PDO 是怎么样管总管务的。要是从前从没接触过业务,那么首先要清楚事情的 4 个特征:原子性(Atomicity卡塔 尔(阿拉伯语:قطر‎、大器晚成致性(Consistency卡塔 尔(英语:State of Qatar)、独立性(Isolation卡塔 尔(英语:State of Qatar)和持久性(Durability卡塔 尔(英语:State of Qatar),即 ACID。用外行人的话说,对于在一个业务中推行的其他职业,即便它是分等第推行的,也自然能够保证该职业会安全地利用于数据库,而且在做事被交给时,不会遭到来自别的连接的影响。事务性职业得以依赖诉求自动撤除(即便你还尚无付诸它卡塔尔,那使得脚本中的错误管理变得尤为便于。
政工平日是通过把一堆改进存款起来、使之同不时候生效而贯彻的。那样做的裨益是能够大大进步这么些立异的频率。换句话说,事务能够使脚本越来越快,何况只怕更强壮(可是要求正确地运用专门的学业技术获取如此的功利卡塔 尔(阿拉伯语:قطر‎。
噩运的是,并非每一个数据库都帮衬工作(Mysql5扶植工作,mysql4作者不精通),所以当第二回展开连接时,PDO 必要在所谓的“自动提交(auto-commit卡塔尔”方式下运作。自动提交情势表示,借使数据库协助专门的职业,那么您所运转的每七个询问都有它和谐的隐式事务,要是数据库不扶植专门的职业,各种查询就不曾这么的事体。如若你必要一个业务,那么必得利用 PDO::beginTransaction() 方法来运维一个事情。假设底层驱动程序不协助专业,那么将会抛出二个PDOException(无论错误管理设置是怎么着的:这总是一个严重错误状态卡塔 尔(英语:State of Qatar)。在叁个作业中,能够选取PDO::commit() 或 PDO::rollBack() 来收场该职业,那取决事务中运作的代码是不是中标。
当脚本结束时,可能当二个连连将要被关门时,要是有三个未成功的事体,那么 PDO 将自动回滚该事务。那是风华正茂种安全措施,有利于制止在剧本非不奇怪结束时现身不近似的情形—— 若无显式地付诸业务,那么如若有某些地点会冒出分歧样,所以要施行回滚,以保险数据的安全性。
try {
$db = new PDO(’mysql:host=localhost,dbname=test’, ‘toot’, ‘123456′,
array(PDO_ATTR_PERSISTENT => true));
echo “Connected/n”;
$db->setAttribute(PDO_ATTR_ERRMODE, PDO_ERRMODE_EXCEPTION);
$db->beginTransaction();
$db->exec(”insert into user(id, name, pwd) values (1, ‘Joe’, ‘123456′)”);
$db->exec(”insert into userDetail(uid, add, tel)
values (1, ‘新加坡新闸路’, ‘15555555555′)”);
$db->commit();

} catch (Exception $e) {
$dbh->rollBack();
echo “Failed: ” . $e->getMessage();
}
在地点的亲自过问中,假使大家为三个新顾客创造生龙活虎组条约,这一个客户有叁个 ID 号,即 1。除了输入这厮的为主数据外,大家还须要记录客商的详细消息。多少个改革分别成功起来很简短,但透过将这多个立异包括在 beginTransaction() 和 commit() 调用中,就可以保障在改动达成早先,别的人不能够看出退换。若是发生了错误,catch 块能够回滚事务先河以来产生的具备改动,并打字与印刷出一条错误新闻。

实际不是早晚要在作业中作出更新。您也得以生出复杂的查询来领取数额,仍为能够采用这种音讯创设越来越多的换代和询问。当职业在运动时,可以保障别的人在劳作打开当中不能作出变动。事实上,这不是 百分之百 的正确,但假若您以前没有耳闻过业务的话,那样介绍也未尝不可。

预管理语句和积存进度

不菲更成熟的数据库都扶持预管理语句的定义。什么是预管理语句?您可以把预管理语句看作您想要运维的 SQL 的风流洒脱种编写翻译过的模版,它能够应用变量参数进行定制。预管理语句可以带给两大利润:

查询只需深入分析(或准备卡塔 尔(英语:State of Qatar)叁遍,可是足以用平等或差别的参数实行数次。当查问筹划好后,数据库将深入分析、编译和优化推行该查询的陈设。对于复杂的查询,那一个进度要花相比较长的光阴,借使您须求以不一致参数多次重复雷同的查询,那么该过程将大大减少应用程序的快慢。通过应用预管理语句,能够免止重复深入分析/编写翻译/优化周期。简言之,预处理语句使用更加少的财富,由此运营得更加快。
提必要预管理语句的参数无需用引号括起来,驱动程序会管理这一个。如若应用程序独自据有地使用预管理语句,那么能够保险未有SQL 侵犯爆发。(可是,假如您依旧将查询的另外界分创立在不受信赖的输入之上,那么就照样存在高风险卡塔 尔(英语:State of Qatar)。
预管理语句是那般有用,招致 PDO 实际上打破了在对象 4 中设下的法则:若是驱动程序不扶持预处理语句,那么 PDO 将仿真预管理语句。

$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(’:calories’ => 150, ‘:colour’ => ‘red’));
$red = $sth->fetchAll();
$sth->execute(array(’calories’ => 175, ‘colour’ => ‘yellow’));
$yellow = $sth->fetchAll();
?>
再有三个列子

$sth = $dbh->prepare(’SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, ‘red’));
$red = $sth->fetchAll();
$sth->execute(array(175, ‘yellow’));
$yellow = $sth->fetchAll();
?>
其它pdo还应该有四个回馈错误函数,errorCode();errorInfo().

下边有一批近似 ;extension=php_mbstring.dll 的事物,这里就是PHP扩大加载的配置了,我们再最终边加多上我们PDO的扩张:
extension=php_pdo.dll
extension=php_pdo_美高梅4858官方网站,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
;extension=php_pdo_oci8.dll

再一次心得地震

May 12, 2008 自言堂 No Comments

 

美高梅4858官方网站 1

  几天前广西汶川时有发生7.8级地震,前天在东京多少个地点也是有感动。有个别厂商都放假了,很五人都以为头眼昏花,挥动。大家协作社在三楼没感觉,在qq跳出音讯才知晓产生地震。记得在上初中的时候,在学园遇到二遍。也没觉获得到。只是大家如此说,后来这个学院放假回家后都不睡觉。最终也没发出什么样。只是这样的经过了。此番Hong Kong也没怎么,大家说会有余震,大家没睡觉在瞎侃着。看资源信息,见到西藏震区有高校倒塌,学子被困。默默为她们祈福,一切都会好的。

各个PDO的驱动,能给加上的全给加上,然则前边的php_pdo_oci8.dll,因为本身尚未设置Oralce数据库,所以并未有那一个,就接收分号注释掉它。然后重启大家的Web服务器, IIS/Apache,作者的是IIS,嘿嘿,表轻渎小编,在Windows上,轻便嘛。重启后,在大家Web服务器的文书档案目录下写多少个phpinfo.php的文本,加上那几个:

vim for window xp

May 12, 2008 兵器谱 No Comments

  一贯在调整力小编那本本的快慢,越来越以为它的新岁龙钟。就一个字,慢。正在思考换掉它。想用eclipse和zend studio 都不可能用,想玩魔兽都无法装。烦扰!

  在它上面做开拓只能用editplus,其实小编也蛮喜欢editplus的,小巧,神速。想起在linux下也是有风流浪漫款看似的软件。vi,正是它。在linux下喜欢用它。相信玩linux都用它呢!。于是觉定在windwos用用。在google搜下还真有这款软件。gvim。下边是部分安装和布局。

第风度翩翩:下载地址是    下载windows版本的。

第二:配置 打开C:/Program Files/Vim/_vimrc文件,小编的安排是底下代码,主要化解编码难点和喜欢的配色。

set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

set diffexpr=MyDiff()
function MyDiff()
  let opt = ‘-a –binary ‘
  if &diffopt =~ ‘icase’ | let opt = opt . ‘-i ‘ | endif
  if &diffopt =~ ‘iwhite’ | let opt = opt . ‘-b ‘ | endif
  let arg1 = v:fname_in
  if arg1 =~ ‘ ‘ | let arg1 = ‘”‘ . arg1 . ‘”‘ | endif
  let arg2 = v:fname_new
  if arg2 =~ ‘ ‘ | let arg2 = ‘”‘ . arg2 . ‘”‘ | endif
  let arg3 = v:fname_out
  if arg3 =~ ‘ ‘ | let arg3 = ‘”‘ . arg3 . ‘”‘ | endif
  let eq = ”
  if $VIMRUNTIME =~ ‘ ‘
    if &sh =~ ‘/<cmd’
      let cmd = ‘”"‘ . $VIMRUNTIME . ‘/diff”‘
      let eq = ‘”‘
    else
      let cmd = substitute($VIMRUNTIME, ‘ ‘, ‘” ‘, ”) . ‘/diff”‘
    endif
  else
    let cmd = $VIMRUNTIME . ‘/diff’
  endif
  silent execute ‘!’ . cmd . ‘ ‘ . opt . arg1 . ‘ ‘ . arg2 . ‘ > ‘ . arg3 . eq
endfunction


” 分裂汉语编码呈现
” 同不时候扶助GBK和UTF-8编码

“set fileencoding=gb18030
“set fileencodings=utf-8,gb18030,utf-16,big5
set fileencodings=ucs-bom,utf-8,cp936
set fileencoding=utf-8
set encoding=cp936 “set encoding=utf-8


” 设置字体

set guifont=Lucida_Console:h14:cANSI


” 运行最大化, 设置颜色方案

” winsize 1024 768
au GUIEnter * simalt ~x
colorscheme desert


“自动缩进

set autoindent


” 设置tab制表符为4个空格

set ts=4
set expandtab
set shiftwidth=4
set cinoptions=>4,e0,n0,f0,{0,}0,^0,:s,=s,l0,gs,hs,ps,ts,+s,c3,C0,(2s,us,
                          /U0,w0,m0,j0,)20,*30

“set cindent


” 展开突显文件类型菜单

let do_syntax_sel_menu = 1 | runtime! synmenu.vim | aunmenu &Syntax.&Show/ filetypes/ in/ menu


” 设置语法

“if &filetype != ‘javacc’
“    setlocal filetype=javacc
“endif
“set syntax=javacc
“cal SetSyn(”cpp”)
“cal SetSyn(”vb”)
“cal SetSyn(”perl”)
“cal SetSyn(”awk”)


” 备份文件放在内定目录

set backupdir=C:/tmp


” 未有警示音和视觉警报

set vb t_vb=


” 禁用swf沟通文件

setlocal noswapfile


” 展现行号

set number


” 掩盖工具条

” see :help ‘guioptions’

set guioptions-=T
“set guioptions-=m


” 状态条,展现字节数,列数,行数,当前行等消息

set statusline=%F%m%r%h%w/ [FORMAT=%{&ff}]/ [TYPE=%Y]/ [ASCII=/%03.3b]/ [HEX=/%02.2B]/ [POS=%04l,%04v][%p%%]/ [LEN=%L]
set laststatus=2 ” always show the status line


“auto-comments for // and /* */
“setlocal comments=sO:*/ -,mO:*/ / ,exO:*/,s1:/*,mb:*,ex:*/,://

“disable auto-comments for //
“setlocal comments=sO:*/ -,mO:*/ / ,exO:*/,s1:/*,mb:*,ex:*/,f://

“disable auto-comments for // and /* */

“setlocal comments=sO:*/ -,mO:*/ / ,exO:*/,s1:/*
setlocal comments=”"
试跳吧,用vim开采蛮爽的。感觉一定不相近。

复制代码 代码如下:

php memcached 的设置与行使

May 9, 2008 memcached No Comments

今日讲讲如何消弭网址的高负荷的并发链接恳求难题。现在b/s结构的网址大大多的架构是那般的。(以自个儿的上三个门类为例卡塔尔国。

1台file系统积攒公共文件,3台db(当中1台master,2台slave,做到读写分离卡塔尔,4台web。最外层还应该有负载均衡。那样的架构在访谈高峰期还是不快。最多的来由是数据库查询的时候消耗的能源。数据库的反复查询,数据来返超慢。造成客户体验非常糟糕。今日讲的是用memcached来缓存平常查询的多少和消耗大数据。

  未来大知道memcached是做哪些的吧!Memcached是布满式的,也便是说它不是地点的。它依据网络连接(当然它也足以运用localhost卡塔 尔(阿拉伯语:قطر‎情势达成劳动,自身它是叁个独自于接纳的次第或守护进度(Daemon方式卡塔尔。
用它还足以很好的解决布满式难题。说白了,便是拿出一块内部存款和储蓄器用来贮存数据,供顾客读取,因为内部存款和储蓄器的速度是飞快的。

 非常的少说了,来点实际的呢。上边是memcached的设置,分linux系统和windows系统。

第一:windows下安装

直白从官方网站就能够下载到 memcached-1.1.12.tar.gz。除却,memcached 用到了 libevent,下载的是 libevent-1.1a.tar.gz。

接下去是个别将 libevent-1.1a.tar.gz 和 memcached-1.1.12.tar.gz 解开包、编译、安装:

# tar -xzf libevent-1.1a.tar.gz # cd libevent-1.1a # ./configure –prefix=/usr # make # make install # cd .. # tar -xzf memcached-1.1.12.tar.gz # cd memcached-1.1.12 # ./configure –prefix=/usr # make # make install

设置到位之后,memcached 应该在 /usr/bin/memcached。

/usr/bin/memcached -d -m 10    -u root -l 192.168.40.4 -p 12000 -c 256 -P /tmp/memcached.pid

参数表明:

-d选项是运维一个守护进度
-m是分配给Memcache使用的内部存款和储蓄器数量,单位是MB,作者这里是10MB
-u是运营Memcache的客商,小编那边是root
-l是监听的服务器IP地址
-p是安装Memcache监听的端口,最棒是1024以上的端口
-c选项是最流年行的并发连接数,默许是1024,遵照你服务器的负载量来设定
-P是设置保存Memcache的pid文件

 

php编写翻译带上–enable-memcache[=DIR] 选项

第二:windows下安装

memcached win32

选料下载binaries版本,解压缩安装。

memcached -d install

memcached -d start

再下载pecl包,

解压,将php_memcache.dll复制到C:/php/ext,在展开C:/WINDOWS下的php.ini参与此行

extension=php_memcache.dll

重启apache,测试下。

以下是memcached常用的函数。

connect($ip,$port);memcached链接。

add ($key, $val, $exp = 0)
往 memcached 中写入对象,$key 是目的的并世无双标志符,$val 是写入的靶子数据,$exp 为过期光阴,单位为秒,默感到不限制时间间;

get ($key)
从 memcached 中获取对象数据,通过对象的必由之路标记符 $key 获取;

replace ($key, $value, $exp=0)
选用 $value 替换 memcached 中标记符为 $key 的对象内容,参数与 add() 方法意气风发致,唯有 $key 对象存在的事态下才会起成效;

delete ($key, $time = 0)
剔除 memcached 中标记符为 $key 的对象,$time 为可选参数,表示删除从前需求等待多久。

<?php
 $mem = new memcache();
 $mem->connect(’localhost’, 11211) or die (”Could not connect”);
 $string = “this is memcached!”;
 $replace = ‘i replace you’;
 $key = ’show’;
 $exp = 3600;
 $mem->set($key,$string,$exp);
 $mem->delete($key,0);
 $mem->replace($key,$replace,$exp);
 echo $mem->get($key);
?>

测量试验下是还是不是比以前快了。


<?
 phpinfo();
?>

输出的内容中,倘使您可以预知得手的旁观:
PDO
PDO support enabled
PDO drivers mysql, pgsql, sqlite, mssql, odbc, firebird
末尾有各个驱动的表明:PDO_Firebird,pdo_mssql,pdo_mysql,PDO_ODBC,pdo_pgsql,pdo_sqlite。那么,恭喜您安装成功了,不然请留神检查上边包车型客车步骤。

PDO教程

自身用的是MySQL 4.0.26,然则小编个人推举大家利用 MySQL 4.1.x 或许 MySQL 5.0.x,因为那个版本有一数不尽有趣的东西值得去读书。大家那边PDO供给连接的正是本身的MySQL 4.0呀,若是您未曾设置MySQL,请自行设置。大家树立好了MySQL,何况在testCurry增加了表foo,包蕴id,name,gender,time等八个字段。

笔者们起初协会首个PDO应用,建设构造多少个pdo.php文件在Web文书档案目录下:

复制代码 代码如下:

<?php
 $dsn = "mysql:host=localhost;dbname=test";
 $db = new PDO($dsn, 'root', '');
 $count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='男',time=NOW()");
 echo $count;
 $db = null;
?>

$dsn = "mysql:host=localhost;dbname=test";

正是组织大家的DSN(数据源卡塔 尔(阿拉伯语:قطر‎,看看里面包车型客车音讯蕴涵:数据库类型是mysql,主机地址是localhost,数据库名称是test,就那样多少个消息。不一样数据库的数码源构造格局是不平等的。
$db = new PDO($dsn, 'root', '');

最早化一个PDO对象,构造函数的参数第4个正是大家的数据源,第一个是连连数据库服务器的客商,第八个参数是密码。大家无法确认保障连接成功,前边大家会讲到相当情形,这里大家一时半刻感到它是接连成功的。
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='男',time=NOW()");
echo $count;

调用我们总是成功的PDO对象来实行二个查询,那个查询是三个布置一条记下的操作,使用PDO::exec() 方法会再次回到叁个影响记录的结果,所以我们输出那几个结果。最终依旧须要收尾对象能源:
$db = null;

暗许那些不是长连接,借使急需多少库长连接,要求最后加叁个参数:array(PDO::ATTPRADO_PEWranglerSISTENT => true) 形成那样:
$db = new PDO($dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));

二次操作就那样轻松,大概跟早先的还没太大分别,跟ADOdb倒是有几分雷同。

PDO进级教程

设若咱们想提取数额来讲,那么就应有采用数据得到作用。(上边用到的$db都以下面已经一而再接二连三好的指标卡塔尔国

复制代码 代码如下:

<?php
 foreach($db->query("SELECT * FROM foo")){
print_r($row);
 }
?>

本文由美高梅4858官方网站发布于美高梅4858官方网站,转载请注明出处:PHP中PDO基础教程

关键词: