快速业务通道

五个常见 PHP数据库问题

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22

  user_id MEDIUMINT,

  name TEXT,

  path TEXT

  );

  Load_files.sql:

  INSERT INTO files VALUES ( 1, 1, 'test1.jpg', 'files/test1.jpg' );

  INSERT INTO files VALUES ( 2, 1, 'test2.jpg', 'files/test2.jpg' );

  Users.sql:

  DROP TABLE IF EXISTS users;

  CREATE TABLE users (

  id MEDIUMINT,

  login TEXT,

  password TEXT

  );

  Load_users.sql:

  INSERT INTO users VALUES ( 1, 'jack', 'pass' );

  INSERT INTO users VALUES ( 2, 'jon', 'pass' );

  在这些文件的多数据库版本中,您应该将 SQL 语句加载到一个数据库中,然后将 users SQL 语句加载到另一个数据库中。用于在数据库中查询与某个特定用户相关联的文件的 PHP 代码如下所示。

  清单 8. Getfiles.php

  <?php

  require_once("DB.php");

  function get_user( $name )

  {

  $dsn = 'mysql://root: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 ) );

  $uid = null;

  while( $res->fetchInto( $row ) ) { $uid = $row[0]; }

  return $uid;

  }

  function get_files( $name )

  {

  $uid = get_user( $name );

  $rows = array();

  $dsn = 'mysql://root:password@localhost/bad_multi2';

  $db =& DB::Connect( $dsn, array() );

  if (PEAR::isError($db)) { die($db->getMessage()); }

  $res = $db->query( "SELECT * FROM files WHERE user_id=?",

  array( $uid ) );

  while( $res->fetchInto( $row ) ) { $rows[] = $row; }

  return $rows;

  }

  $files = get_files( 'jack' );

  var_dump( $files );

  ?>

  get_user 函数连接到包含用户表的数据库并检索给定用户的 ID。get_files 函数连接到文件表并检索与给定用户相关联的文件行。

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

  清单 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:不使用关系

  关系数据库不同于编程语言,它们不具有数组类型。相反,它们使用表之间的关系来创建对象之

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号