PHP访问MySQL讲解

这是一个成功的案例,代码是完全没有问题的(经过测试)。

MySQL:创建Test库以及三个表

表结构如图所示:

PHP访问MySQL讲解

这就是表的结构和测试数据,如果你连数据库和表都不会创建的话,建议先去学mysql,然后在看。

不过我这里提供源代码,可以让你先行测试PHP和MySQL的连接。

创建Test库

create database Test;

创建authors表

//authors表创建:
create table authors(author_id int(11) not null auto_increment,title_id int(11) not null default '0',author varchar(125) default NULL,primary key(author_id))ENGINE = MyISAM default charset = latin1;

//插入authors表数据:
insert into authors values(1,1,'Ellen Siever');
insert into authors values(2,1,'Aaron Weber');
insert into authors values(3,2,'Arnold Robbins');
insert into authors values(4,2,'Nelson H.F. Beebe);

创建books表

//books表创建:
create table books(title_id int(11) not null auto_increment,title varchar(150) default null,pages int(11) default null,primary key(title_id))ENGINE = MyISAM default charset = latin1;

//books表插入数据:
insert into books values(1,'Linux in a Nutshell',476),(2,'Classic Shell Scripting',256);

创建purchases表

//purchases表创建:
create table purchases(id int(11) not null auto_increment,user varchar(10) default NULL,title varchar(150) default NULL, day date default NULL, primary key(id))ENGINE = MyISAM default charset=latin1;

//purchases表插入数据:
insert into purchases values(1,'Mdavis','Regular Expression Pocket Reference','2005-02-15'),(2,'Mdavis','JavaScript & DHTML Cookbook','2005-02-10');

以上代码,复制在mysql里执行即可。


PHP访问数据库

MySQL特定的连接函数:

  • mysql_connect(dbhost,db_host,db_username,$db_password);

PEAR的DB提供的连接函数:

  • connection=DB::connect("mysql://connection = DB::connect("mysql://db_username:dbpassword@[email protected]db_host/$db_database");

两个命令都提供了同样的基本信息,但是PEAR的函数中还指定了要连接的数据库类型。

步骤

  1. 连接到数据库
  2. 选择要使用的数据库
  3. 创建SELECT语句
  4. 执行查询
  5. 显示结果

资源

  • 当连接到MySQL数据库的时候,你会使用到两个新的资源。
  • 第一个是连接的标识符,它记录了一个活动连接用来连接到数据库所必须的所有信息。
  • 另外一个资源是结果资源,它包含了用来从一个有效的数据库查询结果中取出结果所需要的基本信息。

使用PHP函数查询数据库

当你试图连接一个MySQL数据库的时候,MySQL服务器会根据你的用户名和密码进行身份认证。PHP为你建立数据库的连接。

需要的信息:

  1. 数据库服务器的IP地址
  2. 数据库的名字
  3. 用户名
  4. 密码

设置数据库登录的配置文件模板(db_login.php)

<?php
	//本机测试
    $db_host = 'localhost';
    $db_database = 'test';
    $db_username = 'root';
    $db_password = '*************';//这个密码到时要写具体的那个密码,而不是特殊符号,这是为了保密
?>

连接数据库

<?php
    //建立数据库连接
    include('db_login.php');
    $connection = mysql_connect($db_host,$db_username,$db_password);
	//连接不成功,会有警告显示
    if(!$connection){
        die("Could not connect to the database:<br>".mysql_error());
    }
?>

注意:include模板时,注意路径,这里的路径是在同一级文件夹下。

选择数据库

  • 建立连接后,下一步就是使用mysql_select_db来选择我们要使用的数据库。

  • 它的参数有两个:数据库名和可选的数据库连接。如果不指定数据库连接,则默认使用上一条mysql_connect所建立的连接。

	$db_select = mysql_select_db($db_database);
    if(!$db_database){
        die("Could not select to the database:<br>".mysql_error());
    }

连接和选择全部完成的代码:

<?php
//建立数据库连接
    include('db_login.php');
    $connection = mysql_connect($db_host,$db_username,$db_password);
    if(!$connection){
        die("Could not connect to the database:<br>".mysql_error());
    }

    //选择数据库
    $db_select = mysql_select_db($db_database);
    if(!$db_database){
        die("Could not select to the database:<br>".mysql_error());
    }
?>

构建SQL SELECT 查询

构建SQL查询非常容易,就是讲一个字符串赋值给变量。

这个字符串就是我们的SQL查询,前提是SQL查询语句有效,否则就会返回错误。

查询演示

使用$query作为变量,查询books表的所有数据。

跟mysql客户端不同的是,这里的查询不需要以分号结尾。

// 查询表内容,建立查询
$query = "SELECT * FROM books NATURAL JOIN authors";

执行查询

  • 使用mysql_query()函数来告诉数据库执行查询。
  • 它有两个参数,查询和可选的数据库连接,返回值时查询结果。
  • 我们将查询结果保存在一个变量里,变量名是$result
  • 这里同样有必要检查mysql_query()的返回值不是FALSE来确保查询字符串和数据库的连接都没有问题。
//执行查询
    $result = mysql_query($query);
    if(!$result){
        die("Could not query to the database:<br>".mysql_error());
    }

当数据库查询的时候,所有的结果构成一个结果集。这些结果跟使用mysql命令行客户端执行同样查询所得到的行一致,要显示这些结果,就需要依次处理这些行。

取出结果并显示

使用mysql_fetch_row()从结果集中取出一行。

用法如下:

array mysql_fetch_row(resource $result);

  • 它的参数是SQL查询返回的结果,我们将这些结果保存在$result中。
  • 每次调用都用它返回一行数据,直到没有数据为止,这时它返回FALSE
  • 这样我们使用一个循环,在循环内调用mysql_fetch_row()并使用一些代码来显示每一行。
	//取出结果并显示
    while($result_row = mysql_fetch_row($result)){
        echo "Title:".$result_row[1]."<br>";
        echo "Author:".$result_row[4]."<br>";
        echo "Pages:".$result_row[2]."<br>";
    }

结果行的所有列都保存在一个数组里,可以方便的进行访问。

变量$result_row[2]访问结果行的第二个属性(数组的顺序是查询时定义的列的顺序,如果使用SELECT * ,那么数组顺序就是表的列的顺序。

取出结果的方式

  • 取出结果的方式不止一种。使用mysql_fetch_array()可以一次性将所有结果放在一个数组里。
  • 它的参数是查询结果和最后一个可选的结果绑定方式。
  • 两种绑定方式:
    • 如果绑定方式指定为MySQL_ASSOC,数组中的结果则使用查询中的列的名字进行访问。
    • 如果绑定方式指定了为MySQL_NUM,那么就从0开始的数字来访问结果。
  • 默认使用的方式是MySQL_BOTH,这样返回的数组支持两种类型的访问。
  • MySQL_fetch_assoc是使用MySQL_ASSOC取结果的另外一种方式。

用mysql_fetch_array加上MYSQL_ASSOC的方式重写上面的代码

	while($result_row = mysql_fetch_array($result,MYSQLI_ASSOC)){
            echo "Title:".$result_row['title']."<br>";
            echo "Author:".$result_row['author']."<br>";
            echo "Pages:".$result_row['pages']."<br>";
    }

关闭连接

绝大部分情况下,我们使用完一个数据库之后要关闭到它的连接。

使用mysql_close来关闭一个数据库,它会告诉PHP和MySQL这个数据库连接已经不再使用,所使用的所有资源和内存都可以释放。

mysql_close($connection);

总结(数据库连接查询完整代码)

<?php
	//建立数据库连接
    include('db_login.php');
    $connection = mysql_connect($db_host,$db_username,$db_password);
    if(!$connection){
        die("Could not connect to the database:<br>".mysql_error());
    }

    //选择数据库
    $db_select = mysql_select_db($db_database);
    if(!$db_database){
        die("Could not select to the database:<br>".mysql_error());
    }

    // 查询表内容,建立查询
    $query = "SELECT * FROM books NATURAL JOIN authors";

    //执行查询
    $result = mysql_query($query);
    if(!$result){
        die("Could not query to the database:<br>".mysql_error());
    }

    //取出结果并显示
    // while($result_row = mysql_fetch_row($result)){
    //     echo "Title:".$result_row[1]."<br>";
    //     echo "Author:".$result_row[4]."<br>";
    //     echo "Pages:".$result_row[2]."<br><br>";
    // }
    
    // 另一种取出结果的方式
    while($result_row = mysql_fetch_array($result,MYSQLI_ASSOC)){
            echo "Title:".$result_row['title']."<br>";
            echo "Author:".$result_row['author']."<br>";
            echo "Pages:".$result_row['pages']."<br><br>";
    }
	
	//关闭mysql连接
    mysql_close($connection);
?>

PHP对数据库访问其实代码相对固定,在不使用框架或者其他技术,单论原生的代码来说,代码是相对固定的,掌握方法就能很快上手。

希望对大家通过PHP访问MySQL有所帮助。

相关文章: