2015-06-11 198 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); 
     } 
    }