使用带有两个查询的fetch_array

时间:2013-07-02 17:47:15

标签: php sql mysqli

所以我正在为我的教授们进行一项调查,我决定尝试从头开始编写代码。

我已经尝试过使用JOIN,但它实际上并不是我想要的,因为我基本上试图在/ foreach循环时尝试选择问题。

当我尝试加入时,它为每个不同的选项提供了一个问题条目,重复每个选项的问题。

我的数据库已设置好所以我在一个表中有问题(其中包含问题和optiongroupid),我有Optiongroups(差 - 非常好|不满意 - 满意)。

这是我目前的php代码:

 $qry = "SELECT QuestionName, QuestionSubtext, OptionGroupID FROM Questions;";
    $qry2 = "SELECT OptionChoiceName, OptionGroupID FROM OptionGroups;";

    $result = $mysqli->query($qry);
    $option = $mysqli->query($qry2);

    while($row = $result->fetch_array())
        {   
            $rows[] = $row; 
        }
    while($row = $option->fetch_array())
        {
            $rows2[] = $row;
        }
    foreach($rows as $row)
        {
            echo '<font size=4><strong>' . $row['QuestionSubtext'] . '. ' . $row['QuestionName'] . '</strong></font>';
            echo '<div id="options">';
            foreach($rows2 as $rows)
            {
                if ($rows['OptionGroupID'] = $row['OptionGroupID'])
                {
                    echo '<input type="radio" name="satisfy[]" value="' . $rows['OptionChoiceName'] . '">' . $rows['OptionChoiceName'] . '</input>';
                }
            }
            echo "</div>";
            echo "<br>";
        }

我现在面临的一个大问题是,我正在接受PHP Fatal error: Call to a member function fetch_array() on a non-object in /var/www/test/alumni.php on line 66

第66行是while($row = $option->fetch_array())

有人有一些意见吗?我想做的只是根本不可能吗?或者我是以一种非常糟糕的方式去做的?

由于

2 个答案:

答案 0 :(得分:1)

mysqli->query() 总是返回一个mysqli_result对象。如果执行查询时出错,则返回FALSE。如果$ result具有标量FALSE值,则调用$result->fetch_array()会出现致命错误。

您应该始终验证mysqli->query()没有返回FALSE。

$result = $mysqli->query($qry);
if ($result === false) {
    trigger_error($mysqli->error, E_USER_ERROR);
}

输出错误后,您将更深入地了解查询无效的原因。例如,您可能拼错了列名,或者您没有权限读取表,或者发生了其他一些错误。除非你检查错误,否则你不会知道。

答案 1 :(得分:0)

mysqli->query()始终返回mysqli_result对象。

首先检查 $ result $ option 是否为有效对象,而不是迭代到循环中。