php mysqli select resultset ничего не показывает - PullRequest
0 голосов
/ 15 марта 2012

Я пытался взломать это в течение 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 установлены, и они содержат правильные значения. Любая помощь будет принята с благодарностью. Все, что я пытаюсь сделать, это: выбрать оператор, чтобы получить все детали, основанные на представленной 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 ]

1 голос
/ 15 марта 2012

Если предположить, что $queryType - это имя столбца в вашей таблице записей, то я считаю, что проблема заключается в вашем предложении WHERE.

Вместо:

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

Вы должны иметь:

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

Обратите внимание, что я удалил одинарные кавычки вокруг $queryType и использовал сложный (фигурный) синтаксис

Кроме того, в будущем вы можете попробовать использовать блок 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;
        }
1 голос
/ 15 марта 2012

Вы уверены, что есть данные для выбора?Этот код будет выводить данные только в том случае, если они есть на самом деле.

Убедитесь, что $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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...