如果你也想要使用持久连接, 不是每次创造一个新的连接(这使许多WEB应用程序得到了加速,但是要注意有些数据库是不支持的)。可以使用 PConnect 替换掉 Connect。 文件 db_values.inc.php 是我们的数据库信息文件,内容为(你需要把下面代码中的变量改成你自己的): phperz.com
<?php $database_type="mysql"; $host = "localhost"; // 本地数据库 $user = "ian" $password = "let_me_in" ?> www.phperz.com
你可以在 php.ini 配置中设定自动包含我们的配置文件,具体操作可以修改 PHP.ini 的下述行: phperz.com
; Automatically add files before or after any PHP document. auto_prepend_file = /usr/local/build/apache/www/tool_lib/defaults.inc auto_append_file = www.phperz.com
文件 defaults.inc 包含了 $adbdb_path 的值:
www~phperz~com
<? $adodb_path = "/usr/local/build/apache/www/tool_lib/"; ?> phperz.com
还有其他方式来实现它,但是我发现这种方法在移植时,可以相对地减少复杂度。 phperz.com
从一个数据库中进行选择(SELECT)操作 当同时使用开发良好的库函数,和PHP自身提供的函数时,可以有多种方法来访问数据库。用什么方法,完全取决于你自己的喜好。 这里是一个简单的例子: www.phperz.com
$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 } } php程序员站
在上例中,$rs->fields 是一个包含返回值的数组。数组索引被赋予了初始的数字,你也可以按下面的方法来指定其索引: phperz~com
$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 www.phperz.com
对结果浏览的另一个可选的方法是将每条记录作为一个对象返回。 ADOdb 有一个 FetchNextObject() 的函数来实现这一功能,指针会自动地移到下一条记录。 php程序员之家
$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>"; } www~phperz~com
插入、更新记录 基本的 INSERT 操作方便、快捷, 拥有与SELECT一样的语法。 php程序员站
$sql = "INSERT INTO employees (surname, age) values ('Clegg','43')"; if (!($db->Execute($sql))) { print 'Error inserting: '.$db->ErrorMsg().'<BR>'; } php程序员之家
库函数真正的优点,在于它允许你通过相同的语法将记录放入不同的数据库之内,这在以前是绝对不可能的。通常有两种发生的情形。
php程序员站
第一种,引号。所有的引号需要用脱字符(即`符号,键位在Tab键的上边)代替,否则会引起语法错误。但是一些数据库使用一个单引号,另外一些则使用两个单引号。所以,你应当使用 ADOdb 中的 qstr() 而不是 PHP 中的 addslashes()。这样,返回值就将与你所使用的数据库相吻合了。 phperz~com
第二种,日期。许多数据库接受跟他们的日期类型不一致的、不兼容的格式。 ADOdb 有一个 DBDate() 函数,可以将 Unix 的 timestamp, 或 ISO(Y-m-d) 格式转换成任意格式,以此来满足你的数据库的需求。 见下例: www.phperz.com
$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>'; } php程序员之家
你可以以完全相同的方式更新数据库,举例来说: php程序员之家
$sql = "UPDATE employees SET age='44' WHERE id='121')"; if (!($db->Execute($sql))) { print 'Error updating: '.$db->ErrorMsg().'<BR>'; } www.phperz.com
以上仅仅是 Adodb 的一些基本操作 —— 下次我们将会关注一些 ADOdb 提供的比较深层次的东西。 如果我已经使你胃口大开,而且你已经不能再等待, 我建议你去PHP Everywhere看一下,这个站点是ADOdb的专业站点,里面有很多有用的帮助信息。 phperz.com
对查询进行缓存 php程序员站
上个月,我们简单地了解了ADOdb中,如何进行SELECT、INSERT和UPDATE的操作。如果你在ADOdb上是个新手,我建议先读一下上个月的那篇文章。 ADOdb 还有很多更高级的特征,这个月,我们就一起来关注其中的部分内容。 php程序员站
数据库时常会成为应用程序效率低下的祸首。尽量减少对数据库的查询,是提高执行效率的方法之一。这,通常可以通过对整页内容进行缓存(有很多种方法来实现。比如,PEAR->Cache),或者,如果你需要做一张动态页面,并且只想让查询指令被缓存,那么,你可以使用ADOdb,简单地将查询指令缓存起来。在你视图通过缓存来提高你的应用程序的糟糕性能之前,我建议你先试图去优化你的查询指令。有时候,一些简单的索引可以改变一切——有太多的所谓的专业的解决方案,都在使用糟糕的索引。在本文中,你能找到很多这样的实例。现在,让我们来看看ADOdb是如何使你能够对数据库的查询结果进行缓存的。在这个实例中,ADOdb把我们的最后的一次查询的结果保存在/var/tmp/adodb_cache这个缓存文件中,并保留10分钟。
|