|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
培训的第三阶段,开始接触MYSQL,设计数据库,学习PHP如何去连接MYSQL数据库。对于MYSQL,我并不陌生,因为学校开设了Linux系统的课程,对于数据库的操作。ado 媒介
为何要利用数据库类库?
初学者 (乃至一些非初学者)经常犯的毛病,就是在开辟使用法式的时分,缺少对将来的思索。假设有一天,你的法式需求利用其它的数据库,岂非你还需求从头写一篇针关于这个版本数据库的法式吗?这不是不成能产生的,特别是当今朝的数据库能够不合适你以后的需求的时分。 然而当你做这一切的时分 ,你会发明绝非你想像的那样轻易:每个 DBMS 有分歧的函数。举例来讲:在 Mysql 中毗连数据库的函数为 mysql_connect(),而在MSSQL倒是 mssql_connect()。从头检查你一切的代码,然后修正一切操作数据库的函数和查询语法,这毫不是一项复杂的任务。法式会常常的被绑缚到了毛病的数据库上,以致没法在运转时到达最优功能。数据库类库就是如许发生的。它答应你经由过程一样的代码来操作分歧的数据库。一个设计优秀的数据库类库可以完善的改动这一切。它答应你经由过程极小的修正,就可以转接到其他数据库:不管你要毗连甚么数据库办理体系,只需利用统一个的函数,和分歧的参数。举例来讲, 在 ADOdb 中,只需复杂地将 $db = NewADOConnection('access ') 修正为$db = NewADOConnection('mysql'),如许,你就轻松的把你的法式从 Access 数据库转移到了 Mysql 数据库中。如今收集上已有了良多如许的数据库类库,好比Pear,PHPlib,我也已在任务中利用它们了,或许你也已经用过。但本文仅将重点放在我所出格存眷的 ADOdb。本文我只扼要地作一个引见,使你可以即刻应用它来开辟你的下一个项目。今后的文章中咱们将会按部就班的对它进入更深切的懂得。
今朝,ADOdb 撑持的数据库包含 MySQL, PostgreSQL,Interbase,Firebird,Informix,Oracle,MS SQL 7,Foxpro,Access,ADO,Sybase,FrontBase,DB2 和 generic ODBC。
ADOdb 的装置
装置 ADOdb 是一件极期轻易的事,信任伶俐的你必定不会感应费劲。
起首, 肯定你正在运转的 PHP 是 4.0.4 版或更新版。 假如不是,我强列建议你晋级!
从 PHP Everywhere 站点下载 .zip 或 .tgz 文件,解紧缩到你所选的途径下。
这个途径不该在网页目次(WWWTREE,译者注:假如你的网页是在/www/下,那末,这个目次就不该为/www/here)下!固然ADOdb的包括文件已利用了 .inc.php 的扩大名 ,使得办事器即便是在最糟的设置装备摆设下,也不会将这些.inc文件经由过程明文体例在阅读器中显示出来,然而咱们历来不倡始将库函数文件放在网页目次下的行动。然后把下载上去的文件运转:tar -zxvf adodb350.tgz 解压,在Windows下你可使用一个你喜好的解压软件来操作,如许,你会失掉一个 adodb 的目次其下包含了很多子目次。
测试你的装置
好了,让咱们来测试一下你的装置吧。 经由过程在剧本中添加以下三行代码来测试你的装置是不是胜利。注重要把代码中的参数修正成你本人的。
include("$adodb_path/adodb.inc.php"); // includes the adodb library
$db = NewADOConnection('$database_type'); // A new connection
$db->Connect("$host", "$user", "$password", "$database_name");
如今你已具有一个数据库毗连对象 $db 了。 你也能够利用 ADONewConnection 来交换 NewADOConnection ―― 这两个是统一函数的分歧的名字。 毗连的数据库变量 $database_type 需求针对你的实践情形改成你所需求的。可使用以以下表中的一个(括号内的为描写局部,不要在代码中利用):
access (Microsoft Access/Jet)
ado (Generic ADO, the base for all the other ADO drivers)
ado_access (Microsoft Access/Jet using ADO)
ado_mssql (Microsoft SQL Server using ADO)
db2 (DB2)
vfp (Microsoft Visual FoxPro)
fbsql (FrontBase)
ibase (Interbase 6 or before)
firebird (Firebird)
informix72 (Informix databases before Informix 7.3)
informix (Informix)
maxsql (MySQL with transaction support)
mssql (Microsoft SQL Server 7)
mssqlpo (Portable mssql driver)
mysql (MySQL without transaction support)
mysqlt (MySQL with transaction support, identical to maxmysql)
oci8 (Oracle 8/9)
oci805 (Oracle 8.0.5)
oci8po (Oracle 8/9 portable driver)
odbc (Generic ODBC, the base for all the other ODBC drivers)
odbc_mssql (MSSQL via ODBC)
odbc_oracle (Oracle via ODBC)
oracle (Oracle 7)
postgres (PostgreSQL)
postgres64 (PostgreSQL 6.4)
postgres7 (PostgreSQL 7, currently identical to postgres )
sqlanywhere (Sybase SQL Anywhere)
sybase (Sybase)
假如你的链接代码呈现了毛病的提醒,那末你起首要反省的中央就是在途径或毗连的变量上。在你指摘 ADOdb 之前,请肯定你是已准确的利用那些变量。(良多伴侣常花太多工夫去修改这些不言而喻的毛病。) 假如毗连没有任何毛病提醒,那末咱们如今已可以在咱们的项目中来利用 ADodb 了。
经由过程你的剧本毗连到数据库
把上边的代码到场到你的代码前,让咱们先退一步。咱们最好能把上边的代码用咱们本人的办法来封装起来。如许可使你的法式变得更天真、更具移植性。假如你直接把下面的代码拔出到你的项目标每一个文件中,假如未来项目标途径改动了,将会很轻易发生毛病,假如你的暗码改动了,你能够需求对你一切的剧本停止修正,如许将会影响咱们利用库函数的初志。而且,由于你的暗码信息是在WEBTREE下的,这将发生隐患。我保举将暗码信息放在一个自力的包括文件中,好比在 ADOdb 装置目次下的某个中央。假如你要在其他办事器上运转你的法式时,你就不克不及包管目次布局会是不异的,所以,你要确保这个途径是准确的。我建议利用PHP 的主动包括功效来主动地包括这个文件。
include("$adodb_path/db_values.inc.php");
include("$adodb_path/adodb.inc.php");
$db = NewADOConnection('$database_type');
$db->Connect("$host", "$user", "$password", "employees");
假如你也想要利用耐久毗连, 不是每次发明一个新的毗连(这使很多WEB使用法式失掉了减速,然而要注重有些数据库是不撑持的)。可使用 PConnect 交换失落 Connect。
文件 db_values.inc.php 是咱们的数据库信息文件,内容为(你需求把上面代码中的变量改成你本人的):
<?php
$database_type="mysql";
$host = "localhost"; // 当地数据库
$user = "ian"
$password = "let_me_in"
?>
你可以在 php.ini 设置装备摆设中设定主动包括咱们的设置装备摆设文件,详细操作可以修正 PHP.ini 的下述行:
; Automatically add files before or after any PHP document.
auto_prepend_file = /usr/local/build/apache/www/tool_lib/defaults.inc
auto_append_file =
文件 defaults.inc 包括了 $adbdb_path 的值:
<?
$adodb_path = "/usr/local/build/apache/www/tool_lib/";
?>
还有其他体例来完成它,然而我发明这类办法在移植时,可以绝对地削减庞杂度。
从一个数据库中停止选择(SELECT)操作
当同时利用开辟优秀的库函数,和PHP本身供应的函数时,可以有多种办法来会见数据库。用甚么办法,完整取决于你本人的喜欢。
这里是一个复杂的例子:
$sql = "SELECT surname, age FROM employees";
$rs = &$db->Execute($sql);
if (!$rs) {
print $db->ErrorMsg(); // Displays the error message if no results could be returned
}
else {
while (!$rs->EOF) {
print $rs->fields[0].' '.$rs->fields[1].'<BR>';
// fields[0] is surname, fields[1] is age
$rs->MoveNext(); // Moves to the next row
}
}
在上例中,$rs->fields 是一个包括前往值的数组。数组索引被付与了初始的数字,你也能够按上面的办法来指定其索引:
$sql = "SELECT surname, age FROM employees";
$db->SetFetchMode(ADODB_FETCH_ASSOC); // Return associative array
$rs = &$db->Execute($sql);
if (!$rs) {
print $db->ErrorMsg(); // Displays the error message if no results could be returned
}
else {
while (!$rs->EOF) {
print $rs->fields['surname']." ".$rs->fields['age']."<BR>";
$rs->MoveNext(); // Moves to the next row
} // end while
} // end else
对了局阅读的另外一个可选的办法是将每笔记录作为一个对象前往。 ADOdb 有一个 FetchNextObject() 的函数来完成这一功效,指针会主动地移到下一笔记录。
$sql = "SELECT surname, age FROM employees";
$db->SetFetchMode(ADODB_FETCH_ASSOC); // Return associative array
$rs = &$db->Execute($sql);
if (!$rs) {
print $db->ErrorMsg(); // Displays the error message if no results could be returned
}
// loop through results
while ($row = $rs->FetchNextObject()) {
// The field names need to be uppercase
print $row->SURNAME." ".$row->AGE."<BR>";
}
拔出、更新纪录
根基的 INSERT 操作便利、快捷, 具有与SELECT一样的语法。
$sql = "INSERT INTO employees (surname, age) values ('Clegg','43')";
if (!($db->Execute($sql))) {
print 'Error inserting: '.$db->ErrorMsg().'<BR>';
}
库函数真实的长处,在于它答应你经由过程不异的语法将纪录放入分歧的数据库以内,这在之前是相对不成能的。凡是有两种产生的情况。
第一种,引号。一切的引号需求用脱字符(即`符号,键位在Tab键的上边)取代,不然会引发语法毛病。然而一些数据库利用一个单引号,别的一些则利用两个单引号。所以,你应该利用 ADOdb 中的 qstr() 而不是 PHP 中的 addslashes()。如许,前往值就将与你所利用的数据库相吻合了。
第二种,日期。很多数据库承受跟他们的日期类型纷歧致的、不兼容的格局。 ADOdb 有一个 DBDate() 函数,可以将 Unix 的 timestamp, 或 ISO(Y-m-d) 格局转换成恣意格局,以此来知足你的数据库的需求。 见下例:
$employee_surname = $db->qstr("d'Angelo");
$arrival_time = $db->DBDate(time());
// The above two functions also add the enclosing quotes, so, $arrival_time, not '$arrival_time'
$sql = "INSERT INTO employee_arrival (arrival_time,surname) values ($arrival_time,$employee_surname)";
if (!($db->Execute($sql))) {
print 'Error inserting: '.$db->ErrorMsg().'<BR>';
}
你可以以完整不异的体例更新数据库,举例来讲:
$sql = "UPDATE employees SET age='44' WHERE id='121')";
if (!($db->Execute($sql))) {
print 'Error updating: '.$db->ErrorMsg().'<BR>';
}
以上仅仅是 Adodb 的一些根基操作 ―― 下次咱们将会存眷一些 ADOdb 供应的对照深条理的器材。 假如我已使你胃口大开,并且你已不克不及再守候, 我建议你去PHP Everywhere看一下,这个站点是ADOdb的专业站点,外面有良多有效的匡助信息。
本文原文地址: http://www.databasejournal.com/features/php/article.php/2222651
对我一点用处没有啊,我知道该怎么学,但是我想如何才能更快的学,一周速成,啊不,24小时速成那种,皮皮你有没? |
|