对查询结果实行分页

 
 上文只是介绍了最大旨的分页程序,假诺要对寻找留言得到的结果开展分页,则在上述分页程序只能正确的来得第1页,当赢湖转到别的页面后又会议及展览示全部的笔录,而不是查询得到的记录。那是因为单机分页连接后不曾将用户输入的询问关键字传递给别的页。

   
方今的研究开发机器须要配置四个条件,包括数据库。为了管住有利于考虑将mysql数据库实行隔断,即选用单机多实例计划的主意。
找了会资料发现用的人也不是太多,一般的生育环境为了充足发挥机器质量都以单机单实例运转,再拓展一密密麻麻的布置调优..

 
 为此,能够杂获取了用户输入的要害字之后,一方面将它传递给SQL语句实行询问,另一方面将其保存在分页链接的U奥迪Q5L参数(或表单隐藏域)中。具体说来,能够给分页链接扩充三个UPRADOL参数,将该UKoleosL参数的值设置为查询关键字以传递给别的页。

多实例的运维机制

   
通过mysqld_multi运营四个mysqld实例进度,各样实例拥有独立的布署、监听端口、数据库文件、权且文件(日志、socket)等

   首先是全体内容的三个分页,每一个页面包车型地铁来得数为6 fenye1.php

福寿齐天步骤

<?php
/*
 * 
 * @Authors peng--jun 
 * @Email   1098325951@qq.com
 * @Date    2015-11-07 21:21:48
 * @Link    http://www.cnblogs.com/xs-yqz/
 * @version $Id$
 ==========================================
 */
 header("Content-type: text/html; charset=UTF-8"); 
 require("include/conn.php");
 mysql_select_db("lyb",$conn);//选择数据库
 if (isset($_GET['page']) &&intval($_GET['page']>0)) {//获取页码并检查是否非法
     $Page = $_GET['page'];
 }else{
     $Page = 1; //如果获取不到页码则显示第1页
 }
 //设置每页显示记录数
 $PageSize = 6;
 //创建统计记录总数的结果集
 $result = mysql_query("select * from `lyb1`",$conn);
 $RecordCount = mysql_num_rows($result);//获取记录总数
 $PageCount = ceil($RecordCount/$PageSize);//计算总共有多少页
 $sql = "select * from `lyb1` limit ".($Page-1)*$PageSize.",".$PageSize;
 echo $sql;
 $result = mysql_query($sql,$conn)or die("错误".mysql_error());//将某一页的记录放入结果集
 echo $result;
 ?>
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>分页显示</title>
 </head>
 <body>
     <form action="fenye1_resault.php" method="get">
        <div style="border:1px solid gray; background:#eee;padding:4px;"> 
            查找留言:请输入关键字 <input name="keyword" type="text">
            <select name="sel">
                <option value="title">文章标题</option>
                <option value="content">文章内容</option>
                <option value="author">文章作者</option>
            </select>
            <input type="submit" name="submit" value="查询">
            <a href="fenye1.php">返回</a>
        </div>
    </form>
    <table border="1" width="95%">
     <tr bgcolor="#e0e0e0">
        <th>序号</th>
        <th>标题</th>
        <th>内容</th>
        <th>作者</th>
        <th>邮箱</th>
        <th>删除</th>
        <th>更新</th>
    </tr>
    <?php
    while ($row = mysql_fetch_assoc($result)) {
        ?>
        <tr>
           <td><?= $row['id']?></td>
           <td><?= $row['title']?></td>
           <td><?= $row['content']?></td>
           <td><?= $row['author']?></td>
           <td><?= $row['email']?></td>
           <td><a href="delete.php?id=<?= $row['id']?>">删除</a></td>
           <td><a href="editform.php?id=<?= $row['id']?>">更新</a></td>
       </tr>
       <?php        
   }
     mysql_free_result($result);//释放结果集
     ?>
 </table>
    <p><?php //显示分页连接的代码
        if($Page== 1)//如果是第1页,则不显示第1页的链接
        echo  "第一页  上一页 ";
        else{ echo "<a href='?page=1'>第一页</a> <a href='?page=". ($Page-1)."'>上一页</a> "; }
        for ($i=1; $i <= $PageCount ; $i++) { 
            //设置数字页码的链接
            if ($i == $Page) echo "$i  ";//如果是某页,则不显示某页的链接
            else echo "<a href='?page=$i'>$i</a> ";
        }
        if ($Page == $PageCount) {// 设置“下一页”链接
            echo  " 下一页  末页 ";
        }else{
            echo " <a href='?page=" . ($Page+1) . "'>下一页</a> <a href='?page=" . $PageCount . "'>末页</a> ";
        }
        echo " &nbsp 共".$RecordCount. "条记录&nbsp";//共多少条记录
        echo " $Page / $PageCount 页";//当前页面的位置
        ?></p>
    </body>
    </html>

1  伊始化数据目录

mysql_install_db --datadir=/web/mysql/prd/data --user=mysql

mysql_install_db --datadir=/web/mysql/dev/data --user=mysql

 

//当然数据目录也得以拷贝已某个

图片 1

2 配置多实例文件

multi.cnf:

#multi server
[mysqld_multi]
mysqld = /home/root/local/mysql/bin/mysqld_safe
mysqladmin = /home/root/local/mysql/bin/mysqladmin

#mysqld_multi log
log = /web/mysql/multi.log
#用户名密码,用以mysqld_multi操作时透传给mysqladmin(初始化时一般为匿名访问,注释掉即可)
#user=root
#password=

#dev server
[mysqld3306]
user = mysql
port = 3306
socket = /web/mysql/dev/var/mysql.sock
pid-file = /web/mysql/dev/var/mysqld.pid
log-error = /web/mysql/dev/var/mysqld.log
datadir = /web/mysql/dev/data
max_connections = 200
default-storage-engine = innodb
character_set_server = utf8mb4

#prd server
[mysqld3307]
user = mysql
port = 3811
socket = /web/mysql/prd/var/mysql.sock
pid-file = /web/mysql/prd/var/mysqld.pid
log-error = /web/mysql/prd/var/mysqld.log
datadir = /web/mysql/prd/data
max_connections = 1000
default-storage-engine = innodb
character_set_server = utf8mb4

  

 

展现查询结果的页面,每一页的结果数为3
fenye1_resault.php
 由于涉及到查询类型,故也要把询问类型写到U哈弗L在那之中

3 运转多实例

mysqld_multi --defaults-extra-file=multi.cnf start

 

<a href='?page=1&sel=$sel&keyword=$keyword'>第一页</a>

4  管理多实例

检查运行情况

mysqld_multi --defaults-extra-file=multi.cnf report

 

理所当然也足以通过互连网端口检查:

netstat -ntlp tcp

tcp 0 0 :::3306 ::: * LISTEN 3919/mysqld

tcp 0 0 :::3307 ::: * LISTEN 15027/mysqld

 

甘休多实例:

mysqld_multi --defaults-extra-file=multi.cnf stop

 

修改密码(针对有个别实例):

mysqladmin -uroot -S /web/mysql/prd/var/mysql.sock password 123456

 

再而三有个别实例:

mysql -uroot -S /web/mysql/prd/var/mysql.sock -p

 

 

普遍难题

    mysqld_multi执行之后不只怕起动实例,执行report发现实例没有运维。

   
原因:mysql实例目录贫乏读写权限,将多实例的数量目录设置为mysql:mysql的用户组,并扶助读写权限;

    

        

    运营实例之后无法结束,mysqld_multi
stop不生效

    原因:
mysqld实例的数据库管理员密码与mysqld_multi透传的总指挥密码不一样(见multi.conf),通过修改密码可化解。

 

 

<?php
/*
 * 
 * @Authors peng--jun 
 * @Email   1098325951@qq.com
 * @Date    2015-11-07 21:21:48
 * @Link    http://www.cnblogs.com/xs-yqz/
 * @version $Id$
 ==========================================
 */
 header("Content-type: text/html; charset=UTF-8"); 
 require("include/conn.php");
 mysql_select_db("lyb",$conn);//选择数据库
 if (isset($_GET['page']) &&intval($_GET['page']>0)) {//获取页码并检查是否非法
     $Page = $_GET['page'];
 }else{
     $Page = 1; //如果获取不到页码则显示第1页
 }
 //设置每页显示记录数
 $PageSize = 3;
 //创建统计记录总数的结果集

  $keyword=trim($_GET['keyword']);//获取输入的关键字
     $sel=$_GET['sel'];//获取选择的查询类型
     $sql="select * from `lyb1`";
     if ($keyword<>"") {
         $sql=$sql." where $sel like '%$keyword%'";    //构造查询语句
     }
 $result=mysql_query($sql)or die("数据查询错误".mysql_error());

 $RecordCount = mysql_num_rows($result);//获取记录总数
 $PageCount = ceil($RecordCount/$PageSize);//计算总共有多少页
 $sql = $sql." limit ".($Page-1)*$PageSize.",".$PageSize;
 echo $sql;
 $result1 = mysql_query($sql,$conn)or die("错误".mysql_error());//将某一页的记录放入结果集
 echo $result1;

 ?>
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>分页显示</title>
 </head>
 <body>
     <form action="fenye1_resault.php" method="get">
         <div style="border:1px solid gray; background:#eee;padding:4px;"> 
             查找留言:请输入关键字 <input name="keyword" type="text" value="<?= $keyword ?>">
             <select name="sel">
                 <option value="title">文章标题</option>
                 <option value="content">文章内容</option>
                 <option value="author">文章作者</option>
             </select>
             <input type="submit" name="submit" value="查询">
             <a href="fenye1.php">返回</a>
         </div>
     </form>
     <table border="1" width="95%">
         <tr bgcolor="#e0e0e0">
             <th>序号</th>
             <th>标题</th>
             <th>内容</th>
             <th>作者</th>
             <th>邮箱</th>
             <th>删除</th>
             <th>更新</th>
         </tr>
         <?php
         while ($row = mysql_fetch_assoc($result1)) {
         ?>
             <tr>
                 <td><?= $row['id']?></td>
                 <td><?= $row['title']?></td>
                 <td><?= $row['content']?></td>
                 <td><?= $row['author']?></td>
                 <td><?= $row['email']?></td>
                 <td><a href="delete.php?id=<?= $row['id']?>">删除</a></td>
                 <td><a href="editform.php?id=<?= $row['id']?>">更新</a></td>
             </tr>
         <?php        
         }
            mysql_free_result($result);//释放结果集
        ?>
 </table>
    <p><?php //显示分页连接的代码
        if($Page== 1)//如果是第1页,则不显示第1页的链接
        echo  "第一页  上一页 ";
        else{ echo "<a href='?page=1&sel=$sel&keyword=$keyword'>第一页</a> <a href='?page=". ($Page-1)."'>上一页</a> "; }
        for ($i=1; $i <= $PageCount ; $i++) { 
            //设置数字页码的链接
            if ($i == $Page) echo "$i  ";//如果是某页,则不显示某页的链接
            else echo "<a href='?page=$i&sel=$sel&keyword=$keyword'>$i</a> ";
        }
        if ($Page == $PageCount) {// 设置“下一页”链接
            echo  " 下一页  末页 ";
        }else{
            echo " <a href='?page=" . ($Page+1) . "&sel=$sel&&keyword=$keyword'>下一页</a> <a href='?page=" . $PageCount . "'>末页</a> ";
        }
        echo " &nbsp 共".$RecordCount. "条记录&nbsp";//共多少条记录
        echo " $Page / $PageCount 页";//当前页面的位置
        ?>
    </p> 
</body>
</html>

TIPS

   
msyqld_multi命令唯有对布置文件做语法检查,排查难题时需结合multi.log(见配置文件),以及现实实例的错误日志进行;

   
实例标号必须为整数,如msyqld3307中3307供给为数字标注;

 

图片 2

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注