什么会导致我的MySQL查询在两个结果后挂起?

时间:2009-06-12 13:45:57

标签: php mysql

我有一个简单的查询,我不能在我的页面上打印出来的生活:

$results = mysql_query("SELECT * FROM andyasks ORDER BY date");
$test = mysql_fetch_array($results, MYSQL_BOTH);
foreach ($test as $row){
    print($row[questions]);
}

对于前两行,输出的内容(不可预测地,在我看来)只是每个表字段的第一个字母。所以75行表x 5列应该显示75个“问题”排队,但它显示“00WWFFAA00”,这是前两行每个单元格的第一个字母。发生了什么事?

2 个答案:

答案 0 :(得分:5)

试试这个。

$results = mysql_query("SELECT * FROM andyasks ORDER BY date");

while($row = mysql_fetch_array($results))
{
    print($row["questions"]);
}

原因是您只能使用

进行一次提取
$test = mysql_fetch_array($results, MYSQL_BOTH);

这就是为什么你需要在while循环中使用它。它获取一行,while循环将在没有更多行时终止(因为当没有更多行时它返回false)。

答案 1 :(得分:4)

只是为了解释你的代码有什么问题......

您的代码仅将第一行提取到$test变量中。此数组包含两列 - 按索引和按名称键入(这是MYSQL_BOTH的作用)。如果在循环之前插入print_r($test);,它将转储数组的内容,这样你就可以看到发生了什么。

你的循环所做的是遍历每一列并将其值作为字符串提取到$row。当您对包含字符串的变量使用数组语法(即$row["questions"])时,PHP会在您选择的索引处提取一个字符。由于"question"不是数字,因此它的计算结果为0,这就是为什么你得到每列的第一个字母。

ÓlafurWaage有正确的语法来解决你想要做的事情。