2015-10-01 167 views
-2

在phpMyAdmin我有一个简单的查询:查询工作在phpMyAdmin,但不是PHP

SELECT * FROM `recent` WHERE datediff(now(), `timestamp`) > 1 

但是当我尝试这样做,我clear_recent.php:

<?php $result = $conn->query("SELECT * FROM `recent` WHERE datediff(now(), `timestamp`) > 1"); ?> 
    <?php foreach ($result->fetch_assoc() as $row): ?> 
    <?php while($row = $result->fetch_assoc()) { ?> 
    <tr> 
     <td><?php echo($title = $row["id"]); ?></td> 
     <td><?php echo($title = $row["pid"]); ?></td> 
     <td><?php echo($title = $row["user_id"]); ?></td> 
     <td><?php echo($title = $row["timestamp"]); ?></td> 
    </tr> 
    <?php } ?> 
<?php endforeach; ?> 

我得到一个错误:

在/database/chron/clear_recent.php为的foreach()提供参数无效

不能为我的数字生活出了什么问题!!!!请帮忙!

+0

摆脱你的foreach循环,只是有while循环。 [mysqli_fetch_assoc](http://php.net/manual/en/mysqli-result.fetch-assoc.php) – Scuzzy

+0

在循环之前做一个$ result的var_dump并发布其内容 –

+0

Wes Foster我做了一个var转储$ result并得到这个:'object(mysqli_result)#2(5){[“current_field”] => int(0)[“field_count”] => int(4)[“length”] => NULL [“num_rows “] => int(0)[”type“] => int(0)}' –

回答

0

您应该检查查询是否返回任何行。尝试下面的代码。

<?php 
    $result = $conn->query("SELECT * FROM `recent` WHERE datediff(now(), `timestamp`) > 1"); 
    $rows = $result->fetch_assoc(); 

    //check if some rows available. 
    if (count($rows) > 0) { 
     foreach ($rows as $row) { 
      while ($row = $rows) { 
?> 
     <tr> 
      <td><?php echo($title = $row["id"]); ?></td> 
      <td><?php echo($title = $row["pid"]); ?></td> 
      <td><?php echo($title = $row["user_id"]); ?></td> 
      <td><?php echo($title = $row["timestamp"]); ?></td> 
     </tr> 
<?php 
      } 
     } 
    } 
?> 

附加问题:为什么在foreach循环下使用while循环?这样对吗?

+0

谢谢!这工作完美。我没有意识到,如果它没有返回任何行,我会得到一个错误。非常感谢! –

+0

另外,我不知道为什么我使用了一个while循环。我从互联网的某个地方复制了代码,但它确实有效。 –

0

您正在收到此错误,因为没有行从此查询返回。

相关问题