您的位置:首页 > 编程语言 > PHP开发

PHP操作mysql的幾種方法

2007-07-06 23:08 351 查看
一般方法:

$dbhost = 'localhost';
$dbuser = 'root'; //你的mysql用户名
$dbpass = 'a'; //你的mysql密码
$dbname = 'mysql'; //你的mysql库名
$connect = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
mysql_select_db("mysql");
$sql="select * from user";
$result=mysql_query($sql) or die(mysql_error());

echo "<table>";
while($row=mysql_fetch_array($result))
{
echo "<tr><td>$row[0]</td><td>$row[1]</td>
<td>$row[2]</td></tr>";
}
echo "</table>";

mysql_close($connect);

使用DB类创建跨数据库

在PHP的应用中,免不了需要使用数据库,而PHP为我们提供了丰富的数据库支持:
dbase、fbsql、ibase、ifx、msql、mssql、mysql、oci8、odbc、pgsql、sqlite、
storage、sybase,面对众多的数据库,我们可以选择的函数也是多种多样的:
对于dbase,有dbase_*
对于mssql,有mssql_*
对于oci,有ora_*
……
这本应是好事,但是如果需要向其他数据库移植的时候,问题就来了:
查找dbase_*,替换为mssql_*
……
重新查找、分析、改写*_fetch_row,*_fetch_array
……
我们的恶梦开始了,如何才能开发与数据库独立的应用呢?
答案就是使用Pear中的Database 包。

Databse包现在已经包含如下三个主要类:
DB
DB_DataObject
MDB
每个类都可以完成跨数据库平台的设计任务,但是作为最早出来的DB类,
最为大家所熟悉,而其他的DB_DataObject事基于DB的、MDB的使用也和DB相类似。
所以本文简单介绍DB类的使用。

DB类是属于Pear(PHP Extension and Application Repository PHP扩展应用库)中的一个包(Database)。

首先看一个简单的使用DB类的例子:

<?php

$dsn = "mysql:host=localhost;dbname=book";
$db = new PDO($dsn, 'root', 'a');

$sql="select * from bbsmessage where title like '%级%'";
$r=$db->query($sql);

echo "<table>";
while($row=$r->fetch())
{
echo "<tr><td>$row[0]</td><td>$row[1]</td>
<td>$row[2]</td></tr>";
}
echo "</table>";

?>

<?php

require_once "DB.php";
$dsn="mysql://root:@localhost/med";
$db=DB::connect($dsn);
if(DB::iserror($db)) die($db->getMessage());
$sql="select username ,title,dateline
from article ";
$r=$db->query($sql);
if(DB::iserror($r)) die($r->getMessage());
echo "<table>";
while($r->fetchInto($row))
{
echo "<tr><td>$row[0]</td><td>$row[1]</td>
<td>$row[2]</td></tr>";
}
echo "</table>";
$r->free();
$db->disconnect();
?>

该例子包含常见的数据库使用过程:和数据库建立连接、错误检查、提交查询、析取结果、断开连接:
第一步:和数据库建立连接:
$db=DB::connect($dsn);
$dsn参数标明了我们需要使用的数据库类型、已经连接数据库所需要的地址、用户名、
密码等。$dsn的具体定义如下:
DSN: phptype(dbsyntax)://username:password@protocol+hostspec/database?option=value

1:phptype: 后台数据库类型 (比如: mysql , odbc 等.)
可取如下值:

取值 对应的后台数据库类型
dbase dBase
fbsql FrontBase
ibase InterBase
ifx Informix
msql Mini SQL
mssql Microsoft SQL Server
mysql MySQL (for servers running MySQL <= 4.0)
mysqli MySQL (for servers running MySQL >= 4.1)
oci8 Oracle 7/8/9
odbc ODBC (Open Database Connectivity)
pgsql PostgreSQL
sqlite SQLite
sybase Syb
ase

2:dbsyntax: 当使用odbc作为phptype时候,设置该DBMS类型,以决定所使用的ODBC驱动.
比如: access, db2, mssql, navision, solid, 等.

3:username: 登录数据库服务器的用户名
4:password: 对应的密码
5:protocol: 使用的通讯协议 ( 常见的是tcp和unix.)
6:hostspec: 主机以hostname[:port]表示
7:database: 数据库服务器上要用的数据库
8:proto_opts: 协议选项
当成功建立连接后,DB::connect(#dsn)会返回一个DB_Common对象,对象包含了所有的数据库查询方法。使用DB_Common
对象的方法可以方便的对数据库进行查询。
第二步:检查错误:
if(DB::iserror($db)) die($db->getMessage());
当出现错误时,大多数DB类的成员函数(包括后面的查询)都会返回DB_Error对象,如果包含该对象,则表示出错,要检查该对象是否
存在可以使用DB::isError($db_common)(检查数据库通用对象是否出错)或者DB::isError($db_result)(检查查询结果是否出错
).同时DB_Error类还提供其他一些成员函数来获取错误消息:

成员函数名称 函数说明
getMessage() The text messages returned by DB_Error::getMessage() are consistent between each DBMS.
getCode() The error code integers returned by DB_Error::getCode() are also consistent between
each DBMS.The integers returned are based on the DB_ERROR_* constants defined in
DB.php.
getDebugInfo() DB_Error::getUserInfo() return complete native DBMS error reports.
第三步:向数据库发送查询:
$sql="select username ,title,dateline
from article ";
$r=$db->query($sql);

DB_Common的query($sql)方法来返回一个DB_Result 对象,使用DB_Result的一些方法来对查询结果进行数据析取。

第四步:从查询返回的结果集中析取数据:
echo "<table>";
while($r->fetchInto($row))
{
echo "<tr><td>$row[0]</td><td>$row[1]</td>
<td>$row[2]</td></tr>";
}
echo "</table>";

如前面所言:fetchInto($row)是DB_Result的一个成员函数,它将结果集中的当前行析取到一个数组中。

第五步:释放结果集对象以及断开连接:

$r->free();
$db->disconnect();

当查询结束后,特别是当返回一个包含很多行和列的结果集时
DB_Result会占用很多存储空间,程序结束时需要使用free()来释放所占存储空间。
最后使用DB_Common的disconnect()成员函数断开和数据库的连接。

这样,数据库独立的应用就建立好了,当我们需要进行数据库移植,则可以
简单的改变$dsn中的phptype就可以了,如果将这个$dsn放在一个头文件中,
其他的地方include的话,那么我们只需更改一个phptype,整个应用便实现了数据库平台的移植。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: