您的位置: 网站首页 > 数据库 > SQL Server数据库应用技术 > 第12章 使用PHP开发Web数据库 > 【12.5 PHP与SQL Server数据库】

12.5 PHP与SQL Server数据库

 

12.5  PHPSQL Server数据库

12.5.1  PHP数据库操作的流程

要在动态网页上显示数据库存储的数据,PHP就必须能遵照要求,动态地从数据库中取得特定数据。这一部分可以说是数据库在网页应用中使用最多也是最复杂的功能,需要几个函数整合运用来实现。下面以SQL Server数据库为例,讲解PHP数据库操作的主要流程。

PHP程序从SQL Server数据库取得数据,大致的流程有以下5步。

1)与SQL Server服务器建立连接。

2)选择准备操作和使用的指定数据库。

3)发出SQL命令,用一个函数向SQL Server服务器发出SQL的查询指令语句字符串。发出的字符串可以是SQL的任何DML查询指令,但是要取得数据应使用SQL查询语句。查询函数会返回一个查询结果指针。

4)取得结果,用上一个步骤返回的查询的结果指针,用这个指针值就可以从查询结果中,返回特定的数据。通常会返回一条记录,返回的类型为数组或对象。

5)关闭与数据库的链接。

12.5.2  PHPSQL Server函数库

PHP通过Web服务器与SQL Server数据库有两种方式相连,一种是通过phpmssql相关函数,另一种通过phpODBC相关函数。

这里主要讲解第一种方式。首先要保证对mssql的支持,在php配置文件php.ini中将添加“extension=php_mssql.dll”语句,并保证其扩展目录中有“php_mssql.dll”文件。

以下为PHPSQL Server提供的专用函数。

·    mssql_affected_rows取得最后query 影响的列数。

·    mssql_close关闭与数据库的连接。

·    mssql_connect连上数据库。

·    mssql_data_seek移动记录指针。

·    mssql_fetch_array返回数组资料。

·    mssql_fetch_field取得字段信息。

·    mssql_fetch_object返回类资料。

·    mssql_fetch_row返回当前记录的各字段。

·    mssql_field_seek配置指针到返回值的某字段。

·    mssql_free_result释放返回占用内存。

·    mssql_num_fields取得返回字段的数目。

·    mssql_num_rows取得返回记录的数目。

·    mssql_pconnect打开MS SQL服务器持续连接。

·    mssql_query送出一个query字符串。

·    mssql_result取得查询的结果。

·    mssql_select_db选择一个数据库。

下面利用这些函数来连接操作SQL Server数据库的具体过程。

1)首先可以使用mssql_connect函数连接SQL Server服务器,其语法格式如下:

int mssql_connect(string [servername], string [username], string [password]);

该函数用来打开与MS SQL Server数据库的连接。参数servername为想要连上的数据库服务器名称,若要连接本机数据库,可以为空。参数usernamepassword可省略,分别为连接使用的账号及密码。使用本函数需注意早点关闭数据库,以减少系统的负担。连接成功则返回数据库的连接代号,失败返回False值。若要连接本机数据库,可以使用如下PHP代码:

$id = mssql_connect($hostname)

2)然后利用mssql_select_db选择一个数据库。其语法格式如下:

boolean mssql_select_db(string database_name, int [link_identifier]);

该函数选择MS SQL Server中的数据库以供之后的资料查询作业处理。成功返回True,失败则返回False。其中link_identifier为连接数据库后返回的连接代号,默认为上一步中连接的服务器,若要选择本机SQL Server服务器中的school数据库,则可执行如下语句:

$db = mssql_select_db("school",$id);

3)利用mssql_query向打开的数据库发送SQL命令。其语法格式如下:

resource mssql_query(string query[,resource link_identifier[,int batch_size]]);

该函数送出查询字符串供MS SQL Server做相关的处理或者执行。若没有指定link_identifier参数,则程序会自动寻找最近打开的ID。成功则返回资源号,否则返回False

4利用上一步中返回的资源,从中取得结果,并将之赋给变量,此后就可以使用echoprint等语句显示这些变量。通常使用mssql_fetch_array来返回数组资料,使用mssql_fetch_row返回单列的各字段,使用mssql_num_rows取得返回记录的数目。最常使用的是mssql_fetch_array函数。其语法如下:

array mssql_fetch_array(int result);

该函数用来将查询结果result拆到数组变量中。若result没有资料,则返回false值。可以说是mssql_fetch_row()的加强函数,mssql_fetch_row仅可以将返回当前记录及数字索引放入数组,而mssql_fetch_array还可以将文字索引放入数组中。

5)利用mssql_close关闭与数据库的连接。其语法格式如下:

boolean mssql_close(int [link_identifier]);

该函数用来关闭与MS SQL Server 数据库的连接,能关闭使用mssql_connect()函数打开的数据库。参数link_identifier可省略,默认为打开数据库的连接代号。关闭成功则返回true 值。若要关闭连接代号为$id的服务器,则可执行以下语句:

mssql_close($id);

12.5.3  PHP操作SQL Server数据库示例

下面举例从dic表中获取“反切”与“推导拼音”列,并以表格形式显示在网页上。

<?php

$id = mssql_connect();  //打开本机SQL Server服务器

$db = mssql_select_db("new"); //打开其中的new数据库

$sql='select 反切,推導拼音from dic'; //要执行的SQL语句

$result=mssql_query($sql); //执行SQL语句,返回结果

mssql_close(); //关闭本机数据库

echo '共找到'.mssql_num_rows($result).' 条记录,依次如下:';

//打印返回的总记录数

echo '<table border=1>';

//显示表中边框,宽度为1

echo '<tr><td>序号</td><td>反切</td><td>推导拼音</td></tr>'; //表头

while($a=mssql_fetch_array($result)){ //获取结果,每次取一行

$i++; //进行编号,从而在每行之前显示序号

echo "<tr><td>$i</td><td>".$a['反切'].'</td><td>'.$a['推導拼音'].'

</td></tr>'; //打印表中每一行

}

echo '</table>';

?>

打开该网页,如图12-21所示。

12-21  输出所有结果

上面这个例子中只能机械地输出满足SQL语句中的所有条件记录,而不能由网络用户进行交互式操作,如果数据库中的数据不发生变化,由于每次执行的SQL语句是固定的,所以输出的结果网页也是每次相同的。

若要实现交互式查询操作,则可以使用表单来实现,下面的代码实现了通过“字”和“推导拼音”来查找符合条件的记录。

<form method="POST" _disibledevent="return confirm('真的要重置吗?')">

<p>

字:<input name="head" />&nbsp;

拼音:<input name="py" />

</p>

<input type="reset" name="reset" value="清空" />&nbsp;

<input type="button" name="sumbit" value="查找" _disibledevent="if(!head.value && !py.value)alert('请输入要查询的内容!');else submit()"/></p>

</form>

<?php

If ($_POST['head'] || $_POST['py']){

$id = mssql_connect();  //打开本机SQL Server服务器

$db = mssql_select_db("new"); //打开其中的new数据库

if ($_POST['py'])

    $sql="select 反切,推導拼音from dic where LIKE '%{$_POST['head']}%' AND 推導拼音='{$_POST['py']}'";

else

    $sql="select 反切,推導拼音from dic where LIKE '%{$_POST['head']}%' ";

$result=mssql_query($sql); //执行SQL语句,返回结果

mssql_close(); //关闭本机数据库

if($num=mssql_num_rows($result)){

echo '共找到'.$num.' 条记录,依次如下:'; //打印返回的总记录数

echo '<table border=1>'; //显示表中边框,宽度为1

echo '<tr><td>序号</td><td>反切</td><td>推导拼音</td></tr>'; //表头

while($a=mssql_fetch_array($result)){ //获取结果,每次取一行

$i++; //进行编号,从而在每行之前显示序号

echo "<tr><td>$i</td><td>".$a['反切'].'</td><td>'.$a['推導拼音'].'

</td></tr>';

}

echo '</table>';

}

else

    echo'未找到记录,请重新查询。';

}

?>

其中,通过表单中提交的headpy变量来组织动态的SQL语句,从而每次运行查询的结果各不相同,当在“字”标签后的文本框中输入“捎”时,运行结果如图12-22所示。

12-22  交互查询输出结果