PHP_notes_04

来源:互联网 发布:部落冲突苍蝇升级数据 编辑:程序博客网 时间:2024/06/10 23:40
■ PHP 操作 MySQL

“ PHP 开发网站 其实就是 PHP 操作 MySQL 增删改查。”

q:什么是服务器?
a:一般有两层含义:

①物理上的一台实际的基础;

②能提供某种服务的进程,也称为服务器。
例如:
Apache 称为 Web服务器。
MySQL 称为 MySQL服务器(数据库服务器)。


q:PHP 如何连接操作 MySQL 服务器 ?
a:
①通过 mysql_系列函数 连接操作 MySQL;
②通过 mysqli( 面向对象 的方式)连接操作 MySQL;
③通过 PDO(也是 面向对象 的方式,但是比 mysqli 更强大)。

使用 mysql_系列函数 是【面向过程】风格的解决方式(即 直接调用函数来操纵 MySQL)。

使用 mysqli 是【面向对象】风格的解决方式(其实就是把各个函数封装成了对象的方法)。

PDO 封装得更强大(我们不用关心是什么数据库,因为 PDO 已经分别做了处理。通过它能连接oracle、MySQL、SQLserver 等数据库)。


我们先学习 mysql_系列函数,到后期 做项目为了兼容性 我们再学习 PDO。


●在 PHP 中连接 MySQL数据库 使用 mysql_connect()函数。

使用形式:
mysql_connect(服务器地址,用户名,密码 [,端口])

例如:
$con = mysql_connect('192.168.1.199','root','111111',3306);
注意:
①如果 mysql_connect 函数的 默认参数 为:
服务器地址 的默认值为:'localhost'
用户名 的默认值为:'root'
密码 的默认值为:'' (密码默认为空)
端口 的默认值为:3306

② mysql_connect 函数的返回值 是一个资源类型,它代表与 MySQL服务器 的“连接”。
(★ PHP 的 资源类型 就是“通道”。沿着“通道”就能获取资源。)


●在 PHP 中给 MySQL数据库 发送MySQL查询 使用 mysql_query()函数。

使用形式:
mysql_query(SQL查询语句 [,连接])

例如:
$sql = 'use j_db'; 
mysql_query($sql,$con); // $con 是一个“连接”。

$sql = 'set names utf8'; //设置编码
mysql_query($sql,$con);

$sql = 'select * from category';
$qr = mysql_query($sql,$con); // 查询成功就返回【查询结果】(属于一个资源类型)。


注意,mysql_query 的返回值,有两种情况:
①当 SQL查询语句 为 insert、update、delete 时,则返回 bool值。
②当 SQL查询语句 为 select、desc 这些会返回结果集的语句时,则返回 资源类型 或 false。

//★惯用法:判断 MySQL操作 是否成功,如果不成功就输出错误信息。

if(!$qr){
echo mysql_error($con); // mysql_error() 用于查错。
}else{
echo '操作成功';
}



mysql_fetch_assoc(查询结果)
————作用:从结果集中取得一行作为数组。
————注意:返回 关联数组 ,以表中的列名作为数组元素的键。例如下标为:["id"]、["name"]。

例如:

$list = array();
while($row = mysql_fetch_assoc($qr)){
$list[] = $row;
}

以上代码表示,从 查询结果 $qr 中,以数组的形式取出每一行,并放到数组 $list 中,组成一个二维数组。


/*****************************************
封装一个函数,直接返回 select 结果集
参数 $sql 表示 SQL查询语句;
参数 $con 表示 “连接”。
******************************************/

function get_select($sql,$con){
$qr = mysql_query($sql,$con);
/*
判断是否查询成功:
如果查询失败,则输出错误信息,并返回 false 退出函数。
如果查询成功,则从【查询结果】中循环取出每一行,放到数组$list内,组成二维数组,并返回。
*/
if(!$qr){
echo mysql_error($con);
return false;
}else{
$list = array();
while($row = mysql_fetch_assoc($qr)){
$list[] = $row;
}
return $list;
}
}


mysql_fetch_row(查询结果)
————作用:从结果集中取得一行作为数组。
————注意:返回 索引数组 。例如下标为:[0]、[1]、[2]。


mysql_fetch_array(查询结果)
————作用:从结果集中取得一行作为数组。
————注意:返回 关联数组 及 索引数组。


mysql_error(连接)
————作用:返回上一个 MySQL 操作的语法错误信息(用于查错)。


mysql_insert_id(连接)
————作用:返回刚插入的信息中 increment 列的值。(常用于返回 id )


mysql_affected_rows(连接)
————作用:取得前一次 MySQL 操作所影响的记录行数,返回整型数值。

★注意:如果 mysql_query 返回 true,只说明了是从mysql的语法上是看正确的了,即 没有语法错误。但是并不一定对表中的数据产生了影响。

因此,我们要判断 操作是否成功,则需要根据 有多少行受到了影响来判断。
即 我们需要使用 mysql_affected_rows 函数来判断 insert、update、delete 语句是否成功。

/* 判断 insert、update、delete 语句是否成功的代码 */
if(!mysql_query($sql,$con)){
echo 'SQL操作失败,请检查MySQL查询语句的语法。';
}else if(!mysql_affected_rows($con)){
echo '您的操作没有对任何数据产生影响。';
}else{
echo '恭喜您!SQL操作成功!';
}


mysql_close(连接)
————作用:关闭指定的 MySQL 连接。(没必要的!除非在cgi模式下)


脚本每运行一次,新建一次连接,增大了MySQL的连接负担。
java中有连接池的概念,PHP中不可以。每次刷新浏览器,脚本从头到尾执行一遍,MySQL反复连接。

如果不想反复连接,即 PHP脚本结束后,资源也不释放,可以用 mysql_pconnect()函数,但要求 PHP 运行在 fast-cgi 模式下。

q:什么是cgi模式?
a:
cgi模式就是把 PHP 当成进程来执行,然后 Apache 进程 和 PHP 进程通信。
我们一般使用的是,把 PHP 当成 Apache 的一个模块来运行,也就是向 Apache 请求一次,就调一下 PHP 模块。请求结束了,被调的 PHP 模块也就释放了。

原创粉丝点击