【问题标题】:php mysql query within foreach loop not workingforeach循环中的php mysql查询不起作用
【发布时间】:2011-06-03 18:46:46
【问题描述】:

名字几乎说明了一切——

我有一个数组,我想对数组中的每个项目运行一个查询

两个变量来自于此,卷和页码——卷包含在数组中,我需要为每个卷提取相应的页码

这是我的代码:

$volsArr = array(1, 2, 3, 4);

foreach ($volsArr as $volume) {
 $pages = mysql_query("SELECT page FROM $table WHERE vol = '$volume' LIMIT 1");
    if (!$pages) { die("Query to show fields from table failed"); }
      while($row = mysql_fetch_array($pages)) {
       $page = $row['page'];
      }
    echo 'volume is '.$volume.'';
    echo 'page is '.$page.'';
   }

我无法弄清楚我遇到了什么问题,我得到这样的输出:

音量为 1 页面为 40

(这对第 1 卷来说是正确的)

音量为 2 页面为 40

(页码应为 8)

音量为 3 页面为 40

(页面应该再次不同)

等等……

我在关闭循环之前尝试了unset($page),但这似乎没有任何作用,请帮忙!

我还尝试移动回声,使它们位于 while($row...) 循环内,但这只会为我提供数组中第一项的输出......

【问题讨论】:

  • 根据你的更新,原因是:Rows does not exist where vol in ('2','3','4')
  • 尝试在 while 循环中回显 $page。
  • 另外,由于查询中的“LIMIT 1”,您实际上并不需要 while 循环;只需使用 mysql_fetch_assoc ($result) 一次即可获得该单行。然后,您可以使用 mysql_num_rows ($result) 检查查询是否返回任何内容。编辑:对不起,在获取之前使用 mysql_num_rows。

标签: php mysql arrays foreach


【解决方案1】:

根据您的更新,原因是:行不存在where vol in ('2','3','4')

$page 永远不会被更新,因为没有要获取的行。

【讨论】:

  • 这似乎是问题所在,但它让我大吃一惊,因为当我通过 myadmin 查看时,行中有数据... 编辑:查询也在 myadmin 中返回正确的信息
  • 原来我的数组设置不正确,它与查询无关——感谢您指出这一点,因为我不认为我自己会想出来—— - 它总是在我面前......
  • @thomas 尝试首先在字符串中构建查询并回显它,以便您可以准确测试 php 脚本将要执行的内容。
猜你喜欢
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 2014-06-26
  • 2014-12-22
  • 2014-05-14
  • 1970-01-01
  • 2012-09-05
  • 2017-04-04
相关资源
最近更新 更多