五个常见PHP数据库问题(六)

文章作者 100test 发表时间 2007:03:26 17:58:53
来源 100Test.Com百考试题网


清单 15. Get.php

require_once(DB.php).

$dsn = mysql://root:password@localhost/good_books.
$db =&. DB::Connect( $dsn, array() ).
if (PEAR::isError($db)) { die($db->getMessage()). }

function get_author_id( $name )
{
global $db.

$res = $db->query( "SELECT id FROM authors WHERE name=?",
array( $name ) ).
$id = null.
while( $res->fetchInto( $row ) ) { $id = $row[0]. }
return $id.
}

function get_books( $id )
{
global $db.

$res = $db->query( "SELECT id FROM books WHERE author_id=?",
array( $id ) ).
$ids = array().
while( $res->fetchInto( $row ) ) { $ids []= $row[0]. }
return $ids.
}

function get_book( $id )
{
global $db.

$res = $db->query( "SELECT * FROM books WHERE id=?", array( $id ) ).
while( $res->fetchInto( $row ) ) { return $row. }
return null.
}

$author_id = get_author_id( Jack Herrington ).
$books = get_books( $author_id ).
foreach( $books as $book_id ) {
$book = get_book( $book_id ).
var_dump( $book ).
}
?>
如果您看看下面的代码,您可能会想,“嘿,这才是真正的清楚明了。” 首先,得到作者 id,然后得到书籍列表,然后得到有关每本书的信息。的确,它很清楚明了,但是其高效吗?回答是否定的。看看只是检索 Jack Herrington 的书籍时要执行多少次查询。一次获得 id,另一次获得书籍列表,然后每本书执行一次查询。三本书要执行五次查询!
解决方案是用一个函数来执行大量的查询,如下所示。

清单 16. Get_good.php
require_once(DB.php).

$dsn = mysql://root:password@localhost/good_books.
$db =&. DB::Connect( $dsn, array() ).
if (PEAR::isError($db)) { die($db->getMessage()). }

function get_books( $name )
{
global $db.

$res = $db->query(
"SELECT books.* FROM authors,books WHERE
books.author_id=authors.id AND authors.name=?",
array( $name ) ).
$rows = array().
while( $res->fetchInto( $row ) ) { $rows []= $row. }
return $rows.
}

$books = get_books( Jack Herrington ).
var_dump( $books ).
?>

现在检索列表需要一个快速、单个的查询。这意味着我将很可能必须具有几个这些类型的具有不同参数的方法,但是实在是没有选择。如果您想要具有一个扩展的 PHP 应用程序,那么必须有效地使用数据库,这意味着更智能的查询。
本例的问题是它有点太清晰了。通常来说,这些类型的 n 1 或 n*n 问题要微妙得多。并且它们只有在数据库管理员在系统具有性能问题时在系统上运行查询剖析器时才会出现。
结束语
数据库是强大的工具,就跟所有强大的工具一样,如果您不知道如何正确地使用就会滥用它们。识别和解决这些问题的诀窍是更好地理解底层技术。长期以来,我老听到业务逻辑编写人员抱怨,他们不想要必须理解数据库或 SQL 代码。他们把数据库当成对象使用,并疑惑性能为什么如此之差。
他们没有认识到,理解 SQL 对于将数据库从一个困难的必需品转换成强大的联盟是多么重要。如果您每天使用数据库,但是不熟悉 SQL,那么请阅读 The Art of SQL,这本书写得很好,实践性也很强,可以指导您基本了解数据库。

相关文章


RH253RedHatLinux网络及安全管理
利用单元测试对PHP代码进行检查
RH033RedHatLinux基础课程
五个常见PHP数据库问题(六)
五个常见PHP数据库问题(五)
五个常见PHP数据库问题(四)
五个常见PHP数据库问题(三)
五个常见PHP数据库问题(二)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛