【问题标题】:wrong in retrive sql query in php pager code在 php 寻呼机代码中检索 sql 查询时出错
【发布时间】:2013-10-13 20:12:26
【问题描述】:

我的问题是我希望一个页面只显示 10 条记录 我在phpjabbers找到了这个很棒的代码:

    Host = "localhost"
    user="root"
    password=""(Nothing)

<?php
    $con = mysql_connect("localhost","root","") or die("Unable to connect");
    $db = mysql_select_db("test",$con) or die("Unable to select DB");

    if(isset($_GET['page']))
    {
        $page = $_GET['page'];
    }
    else
    {
        $page = 1;
    }

    $sf = ($page-1) * 10;
    $sql = "SELECT * FROM students LIMIT ".$sf.",10";
    $rs = mysql_query($sql,$con);
    //echo $rs;
    ?>
    <html>
    <head>
            <title>Pages</title>
    </head>
    <body>
        <?php
            $sql1 = "SELECT COUNT(name) FROM students";
            $rs1 = mysql_query($sql1,$con);
            $row1 = mysql_fetch_row($rs1);
            $total = $row1[0];
            $tp = ceil($total/10);

            for($i = 1; $i <= $tp; $i++)
            {
                echo "<a href='test.php?page=".$i."'>".$i."</a> ";
            }
        ?>
        <table>
            <tr>
                <th>Name</th>
                <th>Phone Number</th>
            </tr>
            <?php
                while($row = mysql_fetch_assoc($rs))
                {
            ?>
            <tr>
                <td><?php echo $row['name']; ?></td>
                <td><?php echo $row['ph_no']; ?></td>
            </tr>
            <?php
                }
            ?>
        </table>
        <?php
            $sql1 = "SELECT COUNT(name) FROM students";
            $rs1 = mysql_query($sql1,$con);
            $row1 = mysql_fetch_row($rs1);
            $total = $row1[0];
            $tp = ceil($total/10);

            for($i = 1; $i <= $tp; $i++)
            {
            echo "<a href='test.php?page=".$i."'>".$i."</a> ";
            }
        ?>
    </body>
</html>

当我在没有条件的情况下检索表数据时:

"SELECT * FROM students LIMIT ".$sf.",10";

它有效,但是当我添加如下条件时:

"SELECT * FROM `students` where `Instructor-Email`=". $_SESSION['ID'] ." OR `Instructor-Email` IS NULL LIMIT".$sf.",10"

它不起作用。

我怀疑我的查询语法,所以我下载了查询构建器程序(flyspeed sql 查询)并将查询构建为:

"Select * From students Where (`Instructor-Email` = '. $_SESSION['ID'] .') Or (`Instructor-Email` Is Null) LIMIT 0,10" 

但还是不行!

你能告诉我是什么问题吗?感谢您的努力。

【问题讨论】:

    标签: php mysql sql pager


    【解决方案1】:

    您应该在字段名称周围的查询中添加反引号,如下所示:

    `Instructor-Email`=". $_SESSION['ID'] ." OR `Instructor-Email` IS NULL LIMIT".$sf.",10")
    

    (如果该字段确实存在并且包含破折号。)

    【讨论】:

    • 谢谢,但如果你的意思是``,我以前做过但没用:(
    • 你有任何错误信息吗?您确定该字段在此表中吗?而不是在例如讲师表中?
    • 是的,我确定我在其他页面中使用了相同的查询并且它工作正常,我认为错误可能与查询中“LIMIT”的位置有关,消息错误是因为查询没有'不能正常工作 这是:消息错误“警告:mysql_fetch_assoc() 期望参数 1 是资源,在第 86 行的 C:\xampp\htdocs\RecomA\test1.php 中给出的布尔值
    【解决方案2】:

    来自PHP manual

    对于 SELECT、SHOW、DESCRIBE、EXPLAIN 等语句返回 结果集,mysql_query() 成功返回资源,或 FALSE 错误。

    由于您的错误表明在您的 mysql_fetch_assoc() 上传递了一个布尔参数,因此请检查您对实际数据库的查询,例如phpMyAdmin。不要忘记检查您的 $sf 以在所有情况下都包含有效的号码。

    如果用户不这样做,mysql_query() 也会失败并返回 FALSE 有权访问查询引用的表。

    您甚至可以通过mysql_num_rows 查询您的查询是否收到任何结果。 但首先我建议您检查您是否对要查询的表拥有所有必要的权限。

    如果您的脚本中只有一个数据库连接,则无需将您指定为参数的 $con 传递给您进一步的 mysql 函数调用。

    请参阅 Lajos Veres 的第一个答案并始终添加反引号。

    【讨论】:

    • 首先谢谢你。但我在我的问题中说我知道我提出的查询没有发生检索但我不知道为什么的问题?!关于 (``:backticks) 我知道当我的名字像 (a-b,a_b) 时我应该使用它们,但它不起作用:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多