

连接服务器,选择数据库,执行sql语句,获取结果集,结果记录数以及插入,查询,更新删除,截取字符串,乱码相关函数与举例
18.1 PHP访问MySQL数据库的一般步骤
连接mysql服务器——选择数据库——执行sql语句(查询,插入,更新数据,删除数据,显示结果)
——关闭结果集(释放资源)——关闭mysql服务器(最好每次关闭,否则易死机)
18.2 PHP操作MySQL数据的方法
1)用mysql_connect()函数连接mysql服务器
注:这个例子要先把使用的数据库复制到mysql服务器中加载运行
$link = mysql_connect("localhost","root","root") or die ("数据库连接失败,可能服务器没启动或密码错误".mysql_error());
if($link) {
echo "数据源连接成功!";
}
2) 用mysql_select_db()函数选择数据库文件
$link = mysql_connect("localhost","root","root") or die ("数据库连接失败,可能服务器没启动或密码错误".mysql_error());
$db_selected=mysql_select_db("db_database18",$link); //使用选择数据库函数
//$db_selected=mysql_query("use db_database18",$link);
if($db_selected) {
echo "数据库连接成功!";
}
3) 用mysql_query()函数执行sql语句
4) 用mysql_fetch_array()从数据结果集中获取数据信息
例子:
<?php
$link = mysql_connect("localhost","root","root") or die ("数据库连接失败,可能服务器没启动或密码错误".mysql_error());
mysql_select_db("db_database18",$link); //使用选择数据库函数
mysql_query("set names gb2312");
$sql=mysql_query("select * from tb_book");
$info=mysql_fetch_array($sql);
if ($_POST[Submit]=="查询") {
$txt_book=$_POST[txt_book];
$sql=mysql_query("select * from tb_book where bookname like '%".trim($txt_book)."%'"); //使用模糊查询
$info=mysql_fetch_array($sql);
}
if($info==false) { //如检索的信息不存在,就输出提示
echo "<div align='center' style='color:#FF0000; font-size:12px'>对不起,您检索的图书信息不存在!</div>";
}
do{
?>
<tr>
<td><?php echo $info[id];?></td>
<td><?php echo $info[bookname];?></td>
<td><?php echo $info[issuDate];?></td>
<td><?php echo $info[price];?></td>
<td><?php echo $info[publisher];?></td>
</tr>
<?php
} while($info=mysql_fetch_array($sql)) //未明了。。…。……。…………
?>
5) 用mysql_fetch_object()函数从结果集获取一行作为对象,将查询的结果以对象的方式存储,而不是上面以数组
例子:
<?php
$link = mysql_connect("localhost","root","root") or die ("数据库连接失败,可能服务器没启动或密码错误".mysql_error());
mysql_select_db("db_database18",$link); //使用选择数据库函数
mysql_query("set names gb2312");
$sql=mysql_query("select * from tb_book");
$info=mysql_fetch_object($sql); //与mysql_fetch_array()不同之处
if ($_POST[Submit]=="查询") {
$txt_book=$_POST[txt_book];
$sql=mysql_query("select * from tb_book where bookname like '%".trim($txt_book)."%'"); //使用模糊查询
$info=mysql_fetch_object($sql); //与mysql_fetch_array()不同之处
}
if($info==false) { //如检索的信息不存在,就输出提示
echo "<div align='center' style='color:#FF0000; font-size:12px'>对不起,您检索的图书信息不存在!</div>";
}
do{
?>
<tr>
<td><?php echo $info->id; ?></td> //与mysql_fetch_array()不同之处
<td><?php echo $info->bookname; ?></td>
<td><?php echo $info->issuDate; ?></td>
<td><?php echo $info->price; ?></td>
<td><?php echo $info->publisher; ?></td>
</tr>
<?php
} while($info=mysql_fetch_object($sql)) //与mysql_fetch_array()不同之处 //未明了。。…。……。…………
?>
6) 用mysql_fetch_row函数逐行获取每条记录,真正的有序的数组式输出数据
例子:只列出与mysql_fetch_array()不同之处
$row=mysql_fetch_row($sql);
$row=mysql_fetch_row($sql);
<td><?php echo $row[0]; ?></td> //与mysql_fetch_array()不同之处
<td><?php echo $row[1]; ?></td>
<td><?php echo $row[2]; ?></td>
<td><?php echo $row[3]; ?></td>
} while($row=mysql_fetch_row($sql))
7) 用mysql_num_rows()函数获取查询结果集中记录数
<?php $nums=mysql_num_rows($sql);echo $nums; ?>
18.3 PHP操作MySQL数据库
index.php //左边栏的子页面,是图片,在上面加热区
menu.php //公共页面
add_affiche.php //添加公告信息页面
check_add.affiche.php页代码
$conn=mysql_connect("localhost","root","root") or die("数据库服务器连接错误".mysql_error());
mysql_select_db("db_database18",$conn) or die("数据库访问错误".mysql_error());
mysql_query("set names gb2312");
$title=$_POST[txt_title];
$content=$_POST[txt_content];
$createtime=date("Y-m-d H:i:s");
$sql=mysql_query("insert into tb_affiche(title,content,createtime)values('$title','$content','$createtime')");
echo "<script>alert('公告信息添加成功!');window.location.href='add_affiche.php';</script>";
mysql_free_result($sql);
mysql_close($conn);
1) 应用Insert语句动态添加公告信息
$sql=mysql_query("insert into tb_affiche(title,content,createt,createtime) values('$title','$content','$createtime')");
2) 用select语句查询公告信息
search_affiche.php //查询公告信息页,代码
$conn=mysql_connect("localhost","root","root") or die("数据库服务器连接错误".mysql_error());
mysql_select_db("db_database18",$conn) or die("数据库访问错误".mysql_error());
mysql_query("set names gb2312");
$keyword=$_POST[txt_keyword];
$sql=mysql_query("select * from tb_affiche where title like '%$keyword%' or content like '%$keyword%'");
$row=mysql_fetch_object($sql);
if(!$row) {
echo "<font color='red'>您搜索的信息不存在,请使用类似的关键字进行检索!</font>";
}
do{
<tr>
<td><?php echo $row->title; ?></td>
<td><?php echo $row->content; ?></td>
</tr>
}while($row=mysql_fetch_object($sql));
mysql_free_result($sql);
mysql_close($conn);
3) 解决截取公告主题乱码问题,汉字占两个,英文占一个字符,位置不对易乱码
intercept.php页代码
代码段1:
$conn=mysql_connect("localhost","root","root") or die("数据库服务器连接错误".mysql_error());
mysql_select_db("db_database18",$conn) or die("数据库访问错误".mysql_error());
$sql=mysql_query("select * from tb_affiche order by createtime desc limit 0,6");
$info=mysql_fetch_array($sql);
if($info==false) {
echo "本站暂无公告信息!";
}
else{
do{
代码段2:
<tr><td>
echo chinesesubstr($info[title],0,30);
if(strlen($info[title])>30) {
echo "...";
}
</td></tr>
代码段3:
}while($info=mysql_fetch_array($sql));
}
mysql_free_result($sql);
mysql_close($conn);
上面使用到的chinesesubstr()自定义函数代码,这个函数的代码写到单独的function.php文件中
在intercept.php中使用<?php include("function.php");?>引入
function chinesesubstr($str,$start,$len) {
$strlen=$start+$len;
for($i=0;$i<$strlen;$i++) {
if(ord(substr($str,$i,1))>0xa0) {
$tmpstr.=substr($str,$i,2);
$i++;
}
else
$tmpstr.=substr($str,$i,1);
}
return $tmpstr;
}
4) 分页显示公告
注:php.ini中将registr_globals = on;改为才能分页显示
page_affiche.php代码:
代码段1:
$conn=mysql_connect("localhost","root","root") or die("数据库服务器连接错误".mysql_error());
mysql_select_db("db_database18",$conn) or die("数据库访问错误".mysql_error());
mysql_query("set names gb2312");
if ($page=="") { //page为当前页,若为空则设初始值为1
$page=1;
}
if (is_numeric($page)) {
$page_size=4; //每页显示4条记录
$query="select count(*) as total from tb_affiche order by id desc";
$result=mysql_query($query);
$messyage_count=mysql_result($result,0,"total"); //要显示的记录数
$page_count=ceil($message_count/$page_size); //记录总除每总显示记录数得要分的页数
$offset=($page-1)*$page_size; //下一页从第几条数据开始循环
$sql=mysql_query("select * from tb_affiche order by id desc limit $offset, $page_size");
$row=mysql_fetch_object($sql);
if(!$row) {
echo "<font color='red'>暂无公告信息</font>";
}
do{
代码段2:
<tr>
<td><?php echo $row->title; ?></td>
<td><?php echo $row->content ?></td>
</tr>
代码段3:
}while($row=mysql_fetch_object($sql));
}
代码段4和5:
<td>页次:<?php echo $page; ?>/<?php echo $page_count;?>页 记录:<?php echo $message_count; ?>条 </td>
<td>
<?php
if($page!=1) {
echo "<a href=page_affiche.php?page=1>首页</a>";
echo "<a href=page_affiche.php?page=".($page-1).">上一页</a>";
}
if($page<$page_count) {
echo "<a href=page_affiche.php?page=".($page+1).">下一页</a>";
echo "<a href=page_affiche.php?page=".$page_count.">尾页</a>";
}
mysql_free_result($sql);
mysql_close($conn);
?>
</td>
5) 用update编辑公告信息
在update_affiche.php页点某行后的编辑图标后会弹出modify.php?id=*页,
该页编辑最后会通过POST提交到check_modify_ok.php页面处理,处理代码:
$conn=mysql_connect("localhost","root","root") or die("数据库服务器连接错误".mysql_error());
mysql_select_db("db_database18",$conn) or die("数据库访问错误".mysql_error());
mysql_query("set names gb2312");
$title=$_POST[txt_title];
$content=$_POST[txt_content];
$id=$_POST[id];
$sql=mysql_query("update tb_affiche set title='$title',content='$content' where id=$id");
if($sql) {
echo "<script>alert('公告信息编辑成功!');history.back();window.location.href='modify.php?id=$id';</script>";
}else {
echo "<script>alert('公告信息编辑失败!');history.back();window.location.href='modify.php?id=$id';</script>";
}
<meta http-equiv="Content-Type" content='text/html; charset=gb2323">
6) 用delete删除公告信息
在delete_affiche.php页点击要删除那行后的删除图标,该图标链接到check_del_ok.php?id=<?php echo $row->id;?>
然后在check_del_ok.php页通过get方式获取要删除那条记录的ID,该页代码:
$conn=mysql_connect("localhost","root","root") or die("数据库服务器连接错误".mysql_error());
mysql_select_db("db_database18",$conn) or die("数据库访问错误".mysql_error());
mysql_query("set names gb2312");
$id=$_GET[id];
$sql=mysql_query("delete from tb_affiche where id=$id");
if($sql) {
echo "<script>alert('公告信息删除成功!');history.back();window.location.href='modify.php?id=$id';</script>";
}else {
echo "<script>alert('公告信息删除失败!');history.back();window.location.href='modify.php?id=$id';</script>";
}
<meta http-equiv="Content-Type" content='text/html; charset=gb2323">