当前位置:文档之家› 数据库编程技术

数据库编程技术

数据库编程技术
数据库编程技术

数据库编程技术

?PHP操纵MySql数据库

●建立与mysql数据库的连接

PHP连接数据库的方法很简单,应用mysql_connect()函数即可。语法:$conn=mysql_connect(…hostname?,?username?,?password?)

参数hostname:mysql服务器地址,包括:地址和端口号,默认mysql服务器端口号为3306

参数username:登录mysql数据库的用户名

参数password:用户密码

如果连接成功,则函数返回一个资源,为以后执行sql指令做准备

例子:连接数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

echo "连接成功!";//测试用!

}

?>

●选择和使用mysql数据库

连接数据库成功后,就要选择所要使用的数据库了,这里使用mysql_query()函数,格式如下:

mysql_query(“use db_name”);

参数db_name:为要使用的数据库的名字。选择数据库还可以使用mysql_select_db()函数,格式如下:

mysql_select_db(“db_name”);

mysql函数是查询指令的专用函数,所有的sql语句都通过它执行,并返回结果集。mysql_query()函数是打开数据库的专用函数。两者在使用上没有区别。

例子:连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="test";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

echo "连接成功!";//测试用!

}

?>

●关闭数据库

?在数据库操作完成后,一定要使用mysql_close()函数关闭已经打开的数据库连接。

该函数可以提供一个数据库连接的标识符,在前面的例子中,这个标识符是资源变量$conn,也可以不提供数据库连接标识,那么系统将关闭前一次打开的数据库连接。

当脚本结束后,PHP 引擎会自动关闭MySQL 的连接,所以close 你可以不用。当然,用是个好习惯。只有使用php永久连接(mysql_pconnect)才会在脚本结束后不关闭数据库连接!!!

●持久数据库连接

持久连接是指在php脚本结束运行时不关闭的连接。当接收到一个持久连接的请求时,php将检查是否已经存在一个相同的持久连接。所谓相同的连接是指用相同的用户名和密码到相同的主机的连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。

数据库的持久连接并没有提供任何的附加功能,唯一的优势就是提高了运行效率。当mysql数据库和web服务器不在同一台服务器上时,客户端对服务器的连接请求也非常频繁,这时使用持久连接将更加的高效。

在非持久连接情况下,每次处理一个页面时,都要向mysql服务器提出连接请求(即:每个php页面都要执行一次连接数据库的操作)。而持久连接将使得每个子过程,在其生命周期中只做一次连接操作(即:在连接网站到离开网站这段时间无论访问多少个页面都执行一次连接操作)。也就是说,每个子过程将对服务器建立各自独立的永久连接。

使用mysql_pconnect()函数可以打开一个到数据库的持久连接。该函数与mysql_connect()函数原型是一致的。

注意:当连接的时候,本函数将先尝试寻找一个在同一主机上,用同样的用户名和密码已经打开的持久连接,如果找到,则返回此连接的标识而不打开新连接。当脚本执行完毕后,到mysql服务器的连接不会被关闭,此连接将保持打开状态以备后用。就是说:使用mysql_close()函数不会关闭由本函数建立的连接。

?发送数据库查询语句

数据库连接后,就可以使用mysql_query()函数进行各种sql查询操作。

resource mysql_query(string $query[,resource $connect_link])

该函数向指定服务器的当前活动数据库发送一条查询,服务器的连接标识由参数$connect_link指定。如果没有指定$connect_link

则使用上一个打开的连接。$query参数给出一个查询字符串。查询字符串不以分号结束,其查询结果会被缓存。

mysql_query()函数可以用于执行各种sql查询语句。

该函数对select语句返回一个资源标识符,如果查询执行不正确则返回false。对于其他的sql语句,mysql_query()在执行成功时返回true,出错时返回false。

?数据查询与记录行

在数据库操作中,最经常的应用是对数据库的查询操作。在php中,要获取select语句查询的结果可以使用mysql_result()函数,也可以使用更为高效的记录行操作函数:mysql_fetch_row()、mysql_fetch_assoc、mysql_fetch_array()、mysql_fetch_object() 等。

●取得结果单元、

mysql_result()函数可以返回mysql结果集中一个单元的内容。

mixed mysql_result(resource $result,int $row[,mixed $field])

参数$result是由mysql_query()函数返回的结果集的资源标识。$row和$field分别指定了记录行和列(字段)。行参数是一个数字,由0开始。字段参数可以是字段的偏移量,字段名,或者是完整字段名(如:表名.字段名的格式)可选字段参数默认值为0,也就

是说这将返回select语句中,字段列表中的第一个字段的值。

在mysql_result()函数中,如果给出的行参数大于返回结果集的总行数,将返回false。

例子:应用mysql_result()函数

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//查询数据库

$result=mysql_query("select sName,sAge from student") or die("查询失败!".mysql_error());

/**

* mysql_error()函数说明:

* string mysql_error ( [resource link_identifier] )

* 返回上一个MySQL 函数的错误文本,如果没有出错则返回''(空字符串)。

* 如果没有指定连接资源号,则使用上一个成功打开的连接从MySQL 服务器提取错误信息。

* 从MySQL 数据库后端来的错误不再发出警告,要用mysql_error() 来提取错误文本。

* 注意本函数仅返回最近一次MySQL 函数的执行(不包括mysql_error() 和mysql_errno())的错误文本,

* 因此如果要使用此函数,确保在调用另一个MySQL 函数之前检查它的值。

*/

//输出返回结果中第二行的sName字段的数据

echo "用户名:".mysql_result($result,0,0);//由于上面select语句只搜索了两个字段,所以第三个参数只能是0或1,默认为0

echo "年龄:".mysql_result($result,0,"sAge");

//关闭数据库

mysql_close();

?>

例子:遍历数据表取值

见(遍历数据表取值)文件夹

取得记录行

当作用于很大的结果集时应该考虑使用能够取得整行的函数。这些函数在一次函数调用中返回了多个单元的内容,比mysql_result()函数快得多。

array mysql_fetch_assoc(resource $result);

array mysql_fetch_row(resource $result);

array mysql_fetch_object(resource $result);

array mysql_fetch_array(resource $result[,int $result_type]);

这些函数的行为是相似的,对于任何一个函数,在调用之后将返回结果集中的下一行记录,如果没有更多则返回false。

mysql_fetch_row()函数从指定结果集$result中,取得一行数据并作为数组返回。每个结果的列存储在一个数组的单元中,偏移量从0开始。

例子:应用mysql_fetch_row()函数

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//查询记录总数

$result=mysql_query("select * from student");

//该函数一次只能输出结果集中的一条记录,如果要全部输出需要循环,又因为该函数指针会在读取一条记录后自动后移所以循环不需要结束条件

while (false!=($res=mysql_fetch_row($result)))

{

$r[]=$res;

}

print_r($r);//输出所有记录

//关闭数据库

mysql_close();

?>

mysql_fetch_assoc()函数从指定结果集$result中取得一行数据并作为数组返回,每个结果的列存储在一个数组的单元中,其字段名为“键名”。

例子:应用mysql_fetch_assoc()函数

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//查询记录总数

$result=mysql_query("select * from student");

//该函数一次只能输出结果集中的一条记录,如果要全部输出需要循环,又因为该函数指针会在读取一条记录后自动后移所以循环不需要结束条件

while (false!=($res=mysql_fetch_assoc($result)))

{

$r[]=$res;

}

print_r($r);//输出所有记录

//关闭数据库

mysql_close();

?>

mysql_fetch_array()函数和mysql_fetch_row()还有mysql_fetch_assoc()类似,唯一不同就是该函数可以通过参数选择返回数组的字段名是”数字”还是“键名”。

$result_type参数为MYSQL_NUM时得到数字数组,为MYSQL_ASSOC时得到键名数组,为MYSQL_BOTH时得到包含以上两者的数组,默认是MYSQL_BOTH 。

例子:应用mysql_fetch_array()函数

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//查询记录总数

$result=mysql_query("select * from student");

//该函数一次只能输出结果集中的一条记录,如果要全部输出需要循环,又因为该函数指针会在读取一条记录后自动后移所以循环不需要结束条件

while (false!=($res=mysql_fetch_array($result,MYSQL_ASSOC)))

{

$r[]=$res;

}

print_r($r);//输出所有记录

//关闭数据库

mysql_close();

?>

●取得记录的行数

使用mysql_num_rows()函数可以取得查询结果集中的记录的行数

语法:int mysql_num_rows(resource $result);

注意:该函数可以替代之前的select count(*)

例子:应用mysql_num_rows()函数

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//查询记录总数

$result=mysql_query("select * from student");

$total=mysql_num_rows($result);

echo $total;

//关闭数据库

mysql_close();

?>

?数据编辑

在数据库中,常用的数据操作还包括:记录的增删改查

●影响记录的行数

在使用mysql_query()函数对数据进行增删改查等操作后,可以用

mysql_affected_rows()函数获取所影响的记录行数。

语法:int mysql_affected_rows([resource $connect_link]);

该函数返回应用insert、update、delete语句查询所影响的记录的行数。$connect_link参数是最近一次的数据库连接句柄。如果没有指定,则默认为最近一次由mysql_connect()函数

打开的连接句柄。该函数并不适合用于select语句。应该使用mysql_num_rows

来获得由select语句所返回的记录行数。

mysql_affected_rows()函数会返回数据修改语句所影响的记录数,是一个非负整数。如果最近一次查询失败的话,函数返回-1

例子:应用mysql_affected_rows()函数实例

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//插入数据时影响的记录行数

/*$insertSql="insert into student (sName,sSex,sAge,sEmail) values ('张楠','1','26','1323@https://www.doczj.com/doc/3912453806.html,')";

$insertRel=mysql_query($insertSql);

$insertNum=mysql_affected_rows();

echo "插入记录数".$insertNum;*/

//更新数据时影响的记录行数

/*$updateSql="update student set sName='张南' where sID=6";

$updateRel=mysql_query($updateSql);

$updateNum=mysql_affected_rows();

echo "更新记录数".$updateNum;*/

//删除数据时影响的记录行数

$deleteSql="delete from student where sID=6";

$deleteRel=mysql_query($deleteSql);

$deleteNum=mysql_affected_rows();

echo "删除记录数".$deleteNum;

//关闭数据库

mysql_close();

?>

注意:如果最近一次操作是没有任何条件的(即没有where子句)的delete语句,表中的所有记录都会被删除,该函数返回0。因此,要获取删除的记录数必须加上where子句,如:where 1=1 同样是可以删除所有表中数据但可以返回删除的记录数。

例子:删除的记录数

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//删除表中的全部记录

$deleteSql="delete from student where 1=1";

$deleteRel=mysql_query($deleteSql);

$deleteNum=mysql_affected_rows();

echo "删除记录数".$deleteNum;

//关闭数据库

mysql_close();

?>

注意:当使用update查询时,mysql不会将原值和新值相同的列更新,这使得mysql_affected_rows()函数返回值不一定就是符合查询条件的记录数,只有真正被修改的记录数才会被返回。

例子:更新的记录数

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//更新数据

$updateSql="update student set sName='张南' where sID=12";

$updateRel=mysql_query($updateSql);

$updateNum=mysql_affected_rows();

if ($updateNum>0)

{

echo "更新记录数".$updateNum;

}

else echo "未更新任何数据!";

//关闭数据库

mysql_close();

?>

返回自增的ID

如果表中存在自增的字段(AUTO_INCREMENT),很多情况下,需要查看由上一步insert 插入语句产生的自增id号。这时可以使用mysql_insert_id()函数。

语法:int mysql_insert_id([resource $connect_link]);

如果上一查询没有产生AUTO_INCREMENT的值,则该函数返回0

如果需要保存该值,要确保在产生了值的查询之后立即调用mysql_insert_id()。

例子:应用mysql_insert_id()函数

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//插入数据时影响的记录行数

$insertSql="insert into student (sName,sSex,sAge,sEmail) values ('张楠','1','26','1323@https://www.doczj.com/doc/3912453806.html,')";

$insertRel=mysql_query($insertSql);

$resID=mysql_insert_id();

echo "插入记录的ID:".$resID;

//关闭数据库

mysql_close();

?>

注意:该函数返回的类型是int型,如果AUTO_INCREMENT字段的类型是bigint型,则该函数会出问题,需要用last_insert_id()替代!!!

?字段的相关函数

●int mysql_num_fields(resource $result)

该函数将取得结果集中字段的数目。

例子:查询字段名

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//查询字段数量

$selectSql="select * from student";

$selR=mysql_query($selectSql);

$num=mysql_num_fields($selR);

echo $num;

//关闭数据库

mysql_close();

?>

Object mysql_fetch_field(resource $result[,int $field_offset])

其中$result参数是由执行特定查询语句返回的结果集。$field_offset参数指定字段的偏移量。如果没有指定字段的偏移量,则提取下一个存在的字段(即:每提取一个字段后指针自动向后移一位,如需获取表的全部字段名可以利用while)。该函数返回一个包含字段信息的对象。

例子:例子:输出所有字段的对应信息(见黄皮书P315表12.8)

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//查询

$selectSql="select * from student";

$selR=mysql_query($selectSql);

/*

$field=mysql_fetch_field($selR);

echo $field->name;//这种方式只能输出一个字段名*/

/*

$field=mysql_fetch_field($selR,1);

echo $field->name;//这种方式能输出偏移量的一个字段名*/

while ($field=mysql_fetch_field($selR))

{

echo $field->name."
";//输出字段名

//关闭数据库

mysql_close();

?>

Mysql_fetch_row($result)

该函数可以一次输出一条记录

例子:应用mysql_fetch_row函数

//连接并打开数据库

$hostName="127.0.0.1";

$userName="root";

$userPwd="root";

$databaseName="user";

$link=mysql_connect($hostName,$userName,$userPwd);

if (!$link)

{

die("连接数据库失败!");

}

else

{

mysql_select_db($databaseName);//打开数据库

mysql_query("set names gbk");

//echo "连接成功!";//测试用!

}

//查询

$selectSql="select * from student";

$selR=mysql_query($selectSql);

//查询并输出字段的数量

while ($field=mysql_fetch_field($selR))

{

echo $field->name." ";

}

echo "
";

//输出记录

while ($rows=mysql_fetch_row($selR))//循环的是所有记录

{

for ($i=0;$i

{

echo $rows[$i]." "." "." ";

}

echo "
";

//关闭数据库

mysql_close(); ?>

相关主题
文本预览
相关文档 最新文档