清单 1. php数据库文件
files.sql: create table files ( id mediumint, 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' );
您可以用很多的方式创建数据库设计、数据库访问和基于数据库的 php 业务逻辑代码,但最终一般以错误告终,以及在遇到这些问题时如何修复它们。在这些文件的多数据库版本中,您应该将 sql 语句加载到一个数据库中,然后将 users sql 语句加载到另一个数据库中。用于在数据库中查询与某个特定用户相关联的文件的 php 代码如下所示。get_user 函数连接到包含用户表的数据库并检索给定用户的 id。get_files 函数连接到文件表并检索与给定用户相关联的文件行。做所有这些事情的一个更好办法是将数据加载到一个数据库中,然后执行查询,比如下面的查询。清单 2. php数据库文件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 ); ?>
清单 3. 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 ); ?>
该代码不仅更短,而且也更容易理解和高效。我们不是执行两个查询,而是执行一个查询。尽管该问题听起来有些牵强,但是在实践中我们通常总结出所有的表应该在同一个数据库中,除非有非常迫不得已的理由。
http://www.bkjia.com/phpjc/446457.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/446457.htmltecharticlephp还是比较常用的,于是我研究了一下php数据库文件,在这里拿出来和大家分享一下,希望对大家有用。我们会看到一个应用程序中,每个...
