php mysqli select resultset没有显示任何内容

时间:2012-03-15 16:05:52

标签: php mysqli

我一直试图破解这个2个小时,但有些事情是错的。我非常习惯于在没有mysqli的情况下做事,但是读到有一个建议从常规mysql命令转向它。因此我坚持以下:

<?php   
           $mysqli = new mysqli('localhost', 'admin', 'test123', 'kadmindb'); 
            if ($result = $mysqli->query("SELECT * FROM records WHERE '$queryType' = '$keyword'")) {
                while ($row = $result->fetch_object()) {
                    echo "<h2>Result:</h2><br>";
                    echo "ID: " . $row->id . "<br>";                
                    echo "Name: " . $row->cust_name . "<br>";
                    echo "Invoice No: " . $row->invoice_num . "<br>";
                    echo "Date: " . $row->date_recorded . "<br>";   
                }   

            }

        ?>

此代码显示在页面中,其中应显示查询结果但不显示任何内容。我检查了关键字和queryType变量都已设置,它们包含正确的值。任何帮助将不胜感激。我所要做的就是:select语句根据提交的invoice_num检索所有细节。

编辑:从我收到的帮助中,我得到了这个工作:

$query = "SELECT * FROM records WHERE ".$queryType. " LIKE  '%$keyword%' ";
                if ($result = $mysqli->query($query)) {
                    while ($row = $result->fetch_object()) {
                        echo "<h2>Result:</h2><br><hr/> "; 
                        echo "ID: " . $row->id . "<br>";                
                        echo "Name: " . $row->cust_name . "<br>";
                        echo "Invoice No: " . $row->invoice_num . "<br>"; 
                        echo "Date: " . $row->date_recorded . "<br>";   
                        echo "<hr/>";
                    }   

                }

2 个答案:

答案 0 :(得分:1)

您确定要选择哪些数据?如果实际存在,此代码将仅输出数据。

确保设置$queryType$keyword,并且具有可产生结果的合理值

在查询之前立即使用var_dump($queryType)var_dump($keyword)。现在检查你的输出。它们都是字符串吗?直接在PHPMyAdmin中运行此查询并检查您获得的行数。

如果你不能这样做,请尝试回显与查询值一起返回的行数:

if ($result = $mysqli->query("SELECT * FROM records WHERE $queryType = '$keyword'"))
{
    while ($row = $result->fetch_object())
    {
        echo "<h1>Query WHERE '$queryType' = '$keyword' yielded {$result->num_rows} rows!</h1>";
        echo "<h2>Result:</h2><br>";
    ...

注意,你不应该在列($ queryType)周围有单引号,如果你坚持你应该使用反引号引号(`)但实际上并不必要 - 如果你是那么迂腐你应该使用预备语句。

还要确保过滤掉任何可能允许sql注入的潜在危险值。请参阅:mysqli::real_escape_string

答案 1 :(得分:1)

假设$queryType是记录表中列的名称,那么我认为问题是你的WHERE子句。

而不是:

$mysqli->query("SELECT * FROM records WHERE '$queryType' = '$keyword'")

你应该:

$mysqli->query("SELECT * FROM records WHERE {$queryType} = '{$keyword}'")

请注意,我删除了$queryType周围的单引号并使用了complex (curly) syntax

此外,将来您可能希望尝试使用else块来捕获错误:

       $mysqli = new mysqli('localhost', 'admin', 'test123', 'kadmindb'); 
        if ($result = $mysqli->query("SELECT * FROM records WHERE {$queryType} = '{$keyword}'")) {
            while ($row = $result->fetch_object()) {
                echo "<h2>Result:</h2><br>";
                echo "ID: " . $row->id . "<br>";                
                echo "Name: " . $row->cust_name . "<br>";
                echo "Invoice No: " . $row->invoice_num . "<br>";
                echo "Date: " . $row->date_recorded . "<br>";   
            }   

        }
        else
        {
               echo "Error: " . $mysqli->error;
        }