1143次阅读
连接数据库

先来一发数据库集成环境,让我们操作数据库更方便,网上有很多,我用的是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,我们操作数据库就简单很多了

如果您觉得此教程不错,想支持一下,您可以通过支付宝扫码给我们一点,不要超过100元哦!
评论请先登录