五个常见 PHP 数据库问题
:password@localhost/bad_multi1''; $db =& DB::Connect( $dsn, array() ); if (PEAR::isError($db)) { die($db->getMessage()); } $res = $db->query( "SELECT id FROM users WHERE login=?",array( $name ) ); return $uid; function get_files( $name ) $rows = array(); $dsn = ''mysql://root:password@localhost/bad_multi2''; $res = $db->query( "SELECT * FROM files WHERE user_id=?",array( $uid ) ); $files = get_files( ''jack'' ); var_dump( $files ); get_user 函数连接到包含用户表的数据库并检索给定用户的 ID。get_files 函数连接到文件表并检索与给定用户相关联的文件行。 做所有这些事情的一个更好办法是将数据加载到一个数据库中,然后执行查询,比如下面的查询。 清单 9. Getfiles_good.php <?php function get_files( $name ) $dsn = ''mysql://root:password@localhost/good_multi''; $res = $db->query("SELECT files.* FROM users, files WHERE return $rows; $files = get_files( ''jack'' ); var_dump( $files ); 该代码不仅更短,而且也更容易理解和高效。我们不是执行两个查询,而是执行一个查询。 尽管该问题听起来有些牵强,但是在实践中我们通常总结出所有的表应该在同一个数据库中,除非有非常迫不得已的理由。 问题 4:不使用关系 关系数据库不同于编程语言,它们不具有数组类型。相反,它们使用表之间的关系来创建对象之间的一到多结构,这与数组具有相同的效果。我在应用程序中看到的一个问题是,工程师试图将数据库当作编程语言来使用,即通过使用具有逗号分隔的标识符的文本字符串来创建数组。请看下面的模式。 清单 10. Bad.sql DROP TABLE IF EXISTS files; DROP TABLE IF EXISTS users; INSERT INTO files VALUES ( 1, ''test1.jpg'', ''media/test1.jpg'' ); 系统中的一个用户可以具有多个文件。在编程语言中,应该使用数组来表示与一个用户相关联的文件。在本例中,程序员选择创建一个 files 字段,其中包含一个由逗号分隔的文件 id 列表。要得到一个特定用户的所有文件的列表,程序员必须首先从用户表中读取行,然后解析文件的文本,并为每个文件运行一个单独的 SELECT 语句。该代码如下所示。 清单 11. Get.php <?php function get_files( $name ) $res = $db->query( "SELECT files FROM users WHERE login=?",array( $name ) ); |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |