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

做所有这些事情的一个更好办法是将数据加载到一个数据库中,然后执行查询,比如下面的查询。

  清单 9. Getfiles_good.php

<?php
require_once("DB.php");

function get_files( $name )
{
 $rows = array();

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

 $res = $db->query("SELECT files.* FROM users, files WHERE
users.login=? AND users.id=files.user_id",
array( $name ) );
 while( $res->fetchInto( $row ) ) { $rows[] = $row; }

 return $rows;
}

$files = get_files( 'jack' );

var_dump( $files );
?>

  该代码不仅更短,而且也更轻易理解和高效。我们不是执行两个查询,而是执行一个查询。

  尽管该问题听起来有些牵强,但是在实践中我们通常总结出所有的表应该在同一个数据库中,除非有非常迫不得已的理由。

  问题 4:不使用关系

  关系数据库不同于编程语言,它们不具有数组类型。相反,它们使用表之间的关系来创建对象之间的一到多结构,这与数组具有相同的效果。我在应用程序中看到的一个问题是,工程师试图将数据库当作编程语言来使用,即通过使用具有逗号分隔的标识符的文本字符串来创建数组。请看下面的模式。

  清单 10. Bad.sql

DROP TABLE IF EXISTS files;
CREATE TABLE files (
 id MEDIUMINT,
 name TEXT,
 path TEXT
);

DROP TABLE IF EXISTS users;
CREATE TABLE users (
 id MEDIUMINT,
 login TEXT,
 password TEXT,
 files TEXT
);

INSERT INTO files VALUES ( 1, 'test1.jpg', 'media/test1.jpg' );
INSERT INTO files VALUES ( 2, 'test1.jpg', 'media/test1.jpg' );
INSERT INTO users VALUES ( 1, 'jack', 'pass', '1,2' );

  系统中的一个用户可以具有多个文件。在编程语言中,应该使用数组来表示与一个用户相关联的文件。在本例中,程序员选择创建一个 files 字段,其中包含一个由逗号分隔的文件 id 列表。要得到一个特定用户的所有文件的列表,程序员必须首先从用户表中读取行,然后解析文件的文本,并为每个文件运行一个单独的 SELECT 语句。该代码如下所示。

  清单 11. Get.php

<?php
require_once("DB.php");

时间: 2024-10-31 14:55:20

五个常见PHP数据库问题(二)的相关文章

五个常见 PHP 数据库问题

数据|数据库|问题 揭露 PHP 应用程序中出现的五个常见数据库问题 -- 包括数据库模式设计.数据库访问和使用数据库的业务逻辑代码 -- 以及它们的解决方案.如果只有一种 方式使用数据库是正确的--     您可以用很多的方式创建数据库设计.数据库访问和基于数据库的 PHP 业务逻辑代码,但最终一般以错误告终.本文说明了数据库设计和访问数据库的 PHP 代码中出现的五个常见问题,以及在遇到这些问题时如何修复它们. 问题 1:直接使用 MySQL 一个常见问题是较老的 PHP 代码直接使用 my

五个常见 PHP数据库问题

如果只有一种方式使用数据库是正确的,您可以用很多的方式创建数据库设计.数据库访问和基于数据库的 PHP 业务逻辑代码,但最终一般以错误告终.本文说明了数据库设计和访问数据库的 PHP 代码中出现的五个常见问题,以及在遇到这些问题时如何修复它们. 问题 1:直接使用 MySQL 一个常见问题是较老的 PHP 代码直接使用 mysql_ 函数来访问数据库.清单 1 展示了如何直接访问数据库. 清单 1. Access/get.php <?php function get_user_id( $name

五种常见的ASP.NET安全缺陷

asp.net|安全 保证应用程序的安全应当从编写第一行代码的时候开始做起,原因很简单,随着应用规模的发展,修补安全漏洞所需的代价也随之快速增长.根据IBM的系统科学协会(Systems Sciences Institute)的研究,如果等到软件部署之后再来修补缺陷,其代价相当于开发期间检测和消除缺陷的15倍. 为了用最小的代价保障应用程序的安全,在代码本身的安全性.抗御攻击的能力等方面,开发者应当担负更多的责任.然而,要从开发的最初阶段保障程序的安全性,必须具有相应的技能和工具,而真正掌握这些

[Qt教程] 第22篇 数据库(二)编译MySQL数据库驱动

[Qt教程] 第22篇 数据库(二)编译MySQL数据库驱动 楼主  发表于 2013-5-13 21:28:02 | 查看: 1616| 回复: 12 编译MyQSL数据库驱动 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导语 在上一节的末尾我们已经看到,现在可用的数据库驱动只有两类3种,那么怎样使用其他的数据库呢?在Qt中,我们需要自己编译其他数据库驱动的源码,然后当做插件来使用.下面就以现在比较流行的MySQL数据库为例,说明一下怎样在QtCreator中编译数据库驱

戴仁光:五种常见软文标题 标题是软文成功的一半

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 从新闻学的角度来讲,标题的成功就是新闻成功的一半了,一般人看报纸,不一定所有的内容都看,大致浏览一下标题,然后决定看哪些.互联网时代,信息数量处于爆炸状态,在网上浏览信息的耐心就更少了,如果标题没有办法吸引人,那么即使软文写的再好,也大大降低了软文的传播效率. 一:直接陈述式标题 直奔主题,把要表达的信息通过标题陈述出来,比如说"百

五方面入手精选数据库审计产品

本文讲的是五方面入手精选数据库审计产品,安全审计技术源于1980年4月James P. Anderson为美国空军做了一份题为<Computer Security Threat Monitoring and Surveillance>(计算机安全威胁监控与监视)的技术报告,他提出了一种对计算机系统风险和威胁的分类方法, 并将威胁分为外部渗透.内部渗透和不法行为三种,还提出了利用审计跟踪数据监视威胁活动的思想.1990年加州大学戴维斯分校的L. T. Heberlein等人开发出了NSM(Net

DLP攻略:五个危险的数据库默认设置

本文讲的是DLP攻略:五个危险的数据库默认设置,数据库的出厂设置和薄弱的配置让攻击者更容易攻入数据存储,让IT更难以快速检测数据泄露.尽管企业花了很多钱在IT基础设施的各个层次部署数据防御措施,但最终这些努力可能在配置不当的数据库中毁于一旦.无论是因为方便管理员还是数据库管理员缺乏安全意识,企业内经常可以看到数据库仍然采用出厂设置. 这些默认的配置很容易被消息灵通的数据窃贼获取.当攻击者访问到登录屏幕时,他们首先会尝试使用默认账户登录信息.当他们发现存储在数据库的密钥时,他们会如获至宝. Gre

数据库设计的一些构想(模式与数据库设计二)

设计|数据|数据库|数据库设计 数据库设计的一些构想(模式与数据库设计二)   ;) 请大家多提意见相互交流!                                       -------------------------------------------------------------------------------------------- 职能划分功能化: 1/企业组织架构2/企业部门职能的组成要素描述3/部门层次结构4/部门职能划分5/员工职务职能划分6/职务职

与网络可用性测试相关的五个常见的流言

我可能不一定能说服你相信这些流言是不真实的.不管怎样,我支持你把在线可用性测试作为你用户体验设计和研究努力的一个部分.这样做,你将会发现它的优点和局限性. 我很喜欢<流言终结者>这个电视节目,因为我认为他所面临的挑战就是真实.在节目中,用一种令人愉快的和科学的方法来对人们普遍认同的留言进行测试.在节目中我最喜欢的部分,当然除了爆炸的部分,是我所信仰的被证明是不真实的.这一直让我开放思想,专注于现实.我也喜欢另一个方面--揭露还没有建立起来的流言.这就是我这篇文章的视角.特别地,我将突出有关与网