2015-06-11 145 views
2

我在查询我的数据库,并且希望编写一个foreach循环,它会通过我的结果集,并在时间戳上运行strtotime,以便在我的网页(我想调整数组[[发布]]值到strtotime(array [“posted”])。用PDO :: FETCH_ASSOC提供的foreach循环,提供的参数无效

我是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" 
    } 
} 
+0

什么呢'的var_dump($结果);'显示? – honerlawd

+0

@honerlawd添加了var_dump的帖子 –

回答

1

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

改变循环这个

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

嘿,我试过'foreach($ result as $ row){ \t \t \t $ row ['posted'] = strtotime($ row ['posted']); \t \t},因为我想在编码和打印它之前更改实际值,但没有任何反应(var_dump仍显示为[['posted'] => string(19)“2015-06-10 11 :16:46“') –

+0

已更新的主文章只有相关的数据 –

+0

哦,你想重置'$ row ['posted']'的值吗? – honerlawd

0

我不是100%肯定这是否会工作,但我觉得我做了这样的事情,当我有这个问题。

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

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