【问题标题】:retrieving values into an array将值检索到数组中
【发布时间】:2012-04-02 14:06:57
【问题描述】:

我正在尝试将所有分数 print_r($carry_over) 什么也不返回!

$carry_over = array(); 

while ($row8 = mysql_fetch_assoc($query8)) {

   if ($row8['score'] < 40) {
        $carry_over[] = array('m.course_code' =>$row8['course_code']);
   } 
}

print_r($carry_over);

$query8 = mysql_query("SELECT  m.score , m.course_code FROM maintable AS m  
                       INNER JOIN students AS s ON m.matric_no = s.matric_no
                       INNER JOIN courses AS c ON m.course_code = c.course_code
                       WHERE m.matric_no = '".$matric_no."'
                       AND m.level = '".$level."'
                       AND m.score < 40"
                      ) or die (mysql_error());

【问题讨论】:

  • query8 应该返回分数低于 40 的课程,那么为什么要进行 if 测试?

标签: php mysql arrays loops


【解决方案1】:

您的$query8 变量(数据库查询)应该在while() 函数之前 定义。现在,while() 函数迭代了 0 行,这当然会产生一个空数组。

$carry_over = array(); 

while ($row8 = mysql_fetch_array($query8))
{
    $carry_over[] = $row8['course_code'];
}

由于您已经在 SELECT 查询中检查了得分小于 40 的行,因此在 while() 函数内进行检查是多余的。您还错过了 course_code 前面的单引号(以前是一个点),最后;当您可以直接将值添加到第一个数组时,无需在 $carry_over 数组中添加数组。

第二次更新

$matric_no = MAKE_SURE_TO_DEFINE_THIS;
$level = MAKE_SURE_TO_DEFINE_THIS;

// Fetch rows
$query8 = mysql_query("SELECT maintable.score, maintable.course_code, maintable.matric_no, maintable.level, students.matric_no, courses.course_code FROM maintable, students, courses WHERE (maintable.matric_no = '" . $matric_no . "' AND maintable.matric_no = students.matric_no) AND (maintable.course_code = courses.course_code) AND (maintable.level = '" . $level . "')");

$carry_over = array();

while ($row8 = mysql_fetch_array($query8))
{
    // Save data to array
    $carry_over[] = $row8['course_code'];
}

echo 'We found ' . mysql_num_rows($query8) . ' rows';

print_r($carry_over); // DEBUG

【讨论】:

  • 感谢您的帮助。但是在实施您发现的错误之后,我仍然得到相同的结果。谢谢
  • @dotunoyesanmi - 在将 $query8 移到 while() 函数之前,尝试用我刚刚在上面发布的代码替换您的代码
  • 非常感谢您的更新。我更新了您的代码并添加了 print_r($carry_over);它返回...... Array()。这是否意味着查询为空?但是当我在 mysql_num_rows() 中使用 $query8 时,我得到了 2,这就是我所期望的。错误可能在哪里。谢谢
  • @dotunoyesanmi - 试试我刚刚在第二次更新中发布的代码!回显应该验证您是否获得了您期望的 2 行,并且 print_r() 应该可以正常工作...告诉我您是否遇到任何问题
  • 感谢 Tom,第二次更新现在运行良好。感激不尽。我现在就标记你的答案。
【解决方案2】:

数组循环应该是 如果($row8['score']

【讨论】:

  • 检查您的查询是否得分
  • 我做了一个 mysql_num_rows($query8) 并返回 2,这是正确的。
  • 我觉得你的查询太复杂了。试试 Tom 的查询,下面你不需要 INNER join...
  • 再检查一件事,检查你的分数值类型。它是整数吗?
  • @HieuVanMach - 在我的查询中遗漏了一些东西,即将更改它但删除了它,因为他说他实际上从他那里得到了 2 行作为回报,这证明它正在工作
【解决方案3】:

我认为您可能必须先调试$row8 数组。看看里面是什么,或者它可能什么都没有

【讨论】:

  • var_dump($row8) 给出布尔值 false
  • 是的,这就是答案。一开始就没有结果。
  • 我已经完成了 mysql_num_rows ($query8) 并返回 2,这是正确的。 ——
猜你喜欢
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2020-12-23
相关资源
最近更新 更多