先来一发数据库集成环境,让我们操作数据库更方便,网上有很多,我用的是Mysql Workbench,网上有教程,可自行百度。
首先先建一个库吧,然后在建一个test表,表中有三个字段,一个id主键,一个username和一个passwd,然后插入两条数据,再选出来看一下,sql如下:
create database mynote; create table test( id bigint(20) unsigned not null auto_increment comment '主键', username varchar(64) comment '用户名', passwd varchar(64) comment '密码', primary key(id) )default charset=utf8 comment='测试表'; insert into test (username, passwd) values ('欣欣', 'xinxin'); insert into test (username, passwd) values ('玩命牛', 'wanmingniu'); select * from test;
这时候我们的数据库就搭好了,数据也有了,可以用php来取数据啦:
<?php $host = "localhost"; $username = "root"; $password = ""; $dbname = "mynote"; // connect the db(database) $conn = mysql_connect($host, $username, $password); if (! $conn) { die ( 'Could not connect: ' . mysql_error () ); } // select db mysql_select_db ( $dbname, $conn ) or die ( 'can not use ' . $dbname . ': ' . mysql_error () ); // set character set mysql_query ( 'set names utf8', $conn ) or die ( 'can not set utf8: ' . mysql_error () ); // select data $sql = "select * from test"; $res = mysql_query ( $sql, $conn ) or die ( 'query fail: ' . mysql_error () ); // put data to array $arr = array (); $i = 0; while ( $row = mysql_fetch_assoc ( $res ) ) { $arr [$i ++] = $row; } mysql_free_result ( $res ); mysql_close( $conn ); var_dump($arr); ?>check the result
这是一个比较标准的php读取数据库的例子,我们把流程总结一下:1、先调用mysql_connect来连接数据库;2、然后mysql_select_db,选择数据库;3、mysql_query就是执行sql指令;4、mysql_fetch_assoc是从得到的$res中取出一行;5、mysql_free_result将$res资源释放;6、mysql_close关闭数据库连接。
在这个程序中,我们最终把数据封装成了一个数组。然后我们用var_dump就可以将数组打印出来,当然,最终我们的数据不是这样展现,但是我们经常用这种方式调试。还有就是die这个函数,顾名思义,它是使进程退出,如果执行了die函数,那么程序到此为止。
这里只是为大家介绍了查操作,其实增删改也都是用mysql_query来实现的。由于数据库操作十分频繁,所以我们可以专门封装一个类来进行数据库操作:
<?php class SQLHelper { private $conn; private $username = "root"; private $password = ""; private $dbname = "mynote"; private $host = "localhost"; // 构造函数 public function __construct() { $this->conn = mysql_connect ( $this->host, $this->username, $this->password ); if (! $this->conn) { die ( 'Could not connect: ' . mysql_error () ); } mysql_select_db ( $this->dbname, $this->conn ) or die ( 'can not use ' . $this->dbname . ': ' . mysql_error () ); mysql_query ( 'set names utf8', $this->conn ) or die ( 'can not set utf8: ' . mysql_error () ); } // 析构函数,关闭数据库连接 public function __destruct() { if (! empty ( $this->conn )) { mysql_close ( $this->conn ); } } // 查询函数,传入一个sql查询语句,返回一个数组,不必考虑释放资源了 public function execute_dql_array($sql) { $arr = array (); $res = mysql_query ( $sql, $this->conn ) or die ( 'query fail: ' . mysql_error () ); $i = 0; while ( $row = mysql_fetch_assoc ( $res ) ) { $arr [$i ++] = $row; } mysql_free_result ( $res ); return $arr; } // 其他操作,传入一个sql查询语句,返回0表示失败,返回1表示成功,返回2表示没有行收到影响 public function execute_dqm($sql) { $b = mysql_query ( $sql, $this->conn ) or die ( 'query fail: ' . mysql_error () ); if (! $b) { return 0; } else if (mysql_affected_rows ( $this->conn ) > 0) { return 1; } else { return 2; } } // 得到上次插入的记录id public function getLastInsertedId() { return mysql_insert_id ( $this->conn ); } } ?>
当然这里涉及到一些面向对象的知识,不过很简单,__construct是构造函数,也就是创造类的时候,系统会去执行的函数,__destruct是析构函数,也就是销毁类的时候,系统会去执行的函数,用private修饰的函数或变量是私有的,外部不能访问,用public修饰的函数或变量是公有的,外部可以访问。
我们在外部就这样使用:
<?php // 引入SQLHelper.class.php文件 require_once dirname ( __FILE__ ) . '/../../../common/SQLHelper.class.php'; // 创建SQLHelper类 $sqlHelper = new SQLHelper(); // 选出数据 $res = $sqlHelper->execute_dql_array("select * from test"); // 打印数据 var_dump($res); ?>check the result
首先我们用require_once引入类文件,require_once可以保证只会引入一次文件;第二句就是创建类,这时候会去调用类的构造函数__construct,然后我们调用execute_dql_array获取数据,函数内部已经为我们封装好的实现,最后打印数据。
有了SQLHelper,我们操作数据库就简单很多了。