簡體   English   中英

php pdo foreach

[英]Php pdo foreach

這里我有php pdo函數來從數據庫獲取json

try {
      $conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

     $result = $conn->prepare("SELECT id_tabele,naziv FROM track_aktivnosti WHERE prvi=:prvi AND id_akt=:id_akt AND tabela=:tabela");
     $result->execute(array(':prvi' => $_POST['prvi'], ':id_akt' => $_POST['id_akt'], ':tabela' => $_POST['tabela']));
    $result = $result->fetchAll(); 

          foreach($result as $r) {
          $temp = array();
          $temp[] = array('id' => (int) $r['id_tabele'], 'ime_prezime' => (string) $r['naziv']); 

        }
    $table = $temp;
    $jsonTable = json_encode($table);
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }
    echo $jsonTable;

但我只得到一個結果,json中的一個元素,等等。

[{"id":1,"ime_prezime":"Pera Peric"}] 

我無法獲得的其他元素。 為什么?

我必須像這樣獲取json:

[{"id":1,"ime_prezime":"Pera Peric"},[{"id":2,"ime_prezime":"Laza Lazic"}] ] 

但我只得到1.st元素,而其他卻不...

您將在每次迭代中覆蓋foreach內部的數組。 這實際上意味着在每次迭代時都將清空該數組。 該數組將僅包含上次迭代中的值。 移動$temp = array(); 循環外的聲明可解決此問題:

$temp = array(); // intialize the array

foreach($result as $r) {
    $temp[] = array(
        'id' => (int) $r['id_tabele'], 
        'ime_prezime' => (string) $r['naziv']
    ); 
}

上面的修復將使您的代碼正常工作,但是我建議使用使用SQL別名的方法,如下面@YourCommonSense的答案所示。

您正在做很多無用的操作。 難怪你迷路了。

$conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

$sql = "SELECT id_tabele id, naziv ime_prezime FROM track_aktivnosti 
        WHERE prvi=? AND id_akt=? AND tabela=?";

$stmt = $conn->prepare($sql);
$stmt->execute(array($_POST['prvi'], $_POST['id_akt'], $_POST['tabela']));
echo json_encode($result->fetchAll()); 

宣布

$temp = array(); 

在循環外部,因為您在循環內部具有此功能,並且在每次迭代時將其聲明為新數組,並且擦除了先前的條目。

$temp = array();
foreach($result as $r) {

          $temp[] = array('id' => (int) $r['id_tabele'], 'ime_prezime' => (string) $r['naziv']); 

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM