用户名:  密码:   
您当前的位置:首页 > 网页设计 >  PHP > 

第18讲 连接服务器,选择数据库,执行sql语句,获取结果集,结果记录数以及插入,查询,更新删除,截取字符串,乱码相关函数与举例

上次修改时间: 2016-02-18 16:24:41      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\PHP相关\      下一页

连接服务器,选择数据库,执行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">