带有PDO :: FETCH_ASSOC的foreach循环,提供的参数无效

时间:2015-06-11 18:01:41

标签: php pdo foreach

我正在查询我的数据库,并希望编写一个foreach循环,通过我的结果集,并在时间戳上运行strtotime,以便在我的网页上使用它(我想调整array [“posted”]值为strtotime(array [“posted”])。

我是php和PDO的新手,无法弄清楚我的foreach循环有什么问题。我得到的警告是Warning: Invalid argument supplied for foreach() in /home/shooshte/Dropbox/PTC_php/db_queries/articles.php on line 29

我想我的目标是$result数组错误?谁能解释如何解决这个问题?时间戳位于名为posted的列中,该列也是我的数组中的键。

感谢您的帮助。

我的php:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

try {
    $hostname = "localhost";
    $username = "root";
    $password = "";

    $db = new PDO("mysql:host=$hostname;dbname=topdecka_PTC",$username, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if (!empty($_POST["searchword"])) {
        $searchword = $_POST["searchword"];
        $query = $db->prepare("SELECT title, posted, author_id, extract FROM articles WHERE title LIKE :searchword OR extract LIKE :searchword OR body LIKE :searchword");      
        $query->execute(array(":searchword" => "%" . $searchword . "%"));
        $result = $query->fetchAll();

        echo json_encode($result);
        die();
    } 
    else {
        $query = $db->prepare('SELECT posted FROM articles');
        $query->execute();

        $result = $query->fetchAll();

        foreach($result as $row) {
            $row['posted'] = strtotime($row['posted']);
        }

        echo '<pre>';
        var_dump($result);
        echo '</pre>';

        //echo json_encode($result);
        die();
    }
} 
catch (PDOException $e) {
    echo "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>

这是var_dump

array(2) {
  [0]=>
  array(2) {
    ["posted"]=>
    string(19) "2015-06-10 11:16:46"
    [0]=>
    string(19) "2015-06-10 11:16:46"
  }
  [1]=>
  array(2) {
    ["posted"]=>
    string(19) "2015-06-10 13:26:54"
    [0]=>
    string(19) "2015-06-10 13:26:54"
  }
}

2 个答案:

答案 0 :(得分:1)

警告发生在第29行(所以在foreach($row['posted'] as $time))。原因是$row['posted']不是数组。

将循环更改为此

for($i = 0; $i < count($result); ++$i) {
  $result[$i]['posted'] = strtotime($result[$i]['posted']) * 1000;
}

答案 1 :(得分:0)

我不是百分百确定这是否有效,但我认为当我遇到这个问题时我做了类似的事情。

$resultset = array();
   while ($row = $query->fetch()) { $resultset[] = $row; }  

   foreach($resultset as $result) {
        foreach($row["posted"] as $time) {
            $time = strtotime($time);
        }   
    }