2015-05-06 34 views
0

當我在while循環中回顯輸出時,它會給我所期望的所有結果。 然而,當我在外面呼應時,我只得到一個。我知道如果我使用數組,它會給我我期待的結果,但不知道如何。 由於一些未知的原因,我不喜歡陣列,我一直在避免它們。如何在while循環中輸出結果

$sql="select concat(p.firstName,' ',p.lastName) as parents 
from parent p, 
parentstudent ps, 
student s 
where p.parent_id = ps.parent_id 
and s.student_id = ps.student_id 
and p.parent_id IN ('".$_SESSION['list'][1]."','".$_SESSION['list'][2]."','".$_SESSION['list'][3]."','".$_SESSION['list'][4]."')"; 

$result = $conn->query($sql); 
if($result->num_rows > 0) { 
while($row = $result->fetch_object()) { 
     echo $participants = $row->parents." "; 
    } 
} 
+4

避免數組?爲什麼?他們是有用的 – Ghost

+1

避免編程中的數組?你確定? – briosheje

+0

也許我需要一個比http://php.net/更好的源碼。 – user3263892

回答

2

使用數組選項是很簡單 - 你首先需要聲明的數組,你的循環開始之前,像這樣:

$arr = array();

我們做這種方式來確保$arr保留在while循環內部和外部的範圍內。然後,在循環中,將項目添加到陣列中是這樣的:

$arr[] = $row->parents;

結合這一點,我們得到了我們的代碼:

$arr = array(); 
$result = $conn->query($sql); 
if($result->num_rows > 0) { 
while($row = $result->fetch_object()) { 
    $arr[] = $row->parents; 
} 

print_r($arr); 

如果構建陣列後,你想重溫每個元/父值,你只需要再次迭代這個數組,你可以這樣做:

foreach($arr as $parent) { 
    echo $parent . " "; 
} 

或者,你可以打印出相同的字符串你PRI NT在你的循環,通過使用implode()加入陣列在一起的所有元素:

print implode(" ", $arr); 

要創建一個事先準備好的聲明,結合給父母,我們還需要建立佔位符的數組 - 我們可以做這與array_fill()。我們需要一個佔位符的$arr每個元素,我們可以做到這一點是這樣的:

$placeholders = array_fill(0, count($arr), "?"); 

這是說建立一個陣列,從第一(0)級元素,與相同數量的元素爲$arr,並填寫它帶有問號(PDO的佔位符 - 我認爲這是你想要使用什麼?)

然後,我們可以建立我們準備好的聲明中這樣的(假設PDO):

$stmt = $pdo->prepare('select .... where X IN (' . implode(",", $placeholders) . ')'); 

,將建立一個聲明看起來像
select .... where X IN (?, ?, ?, ... ?)。 無論佔位符在您的陣列中。

然後,您可以只執行語句,並把它傳遞$arr填補這些佔位符:

$stmt->execute($arr);

如果您使用的mysqli相反,它應該是相似的。

+0

有時你只需要一個例子。謝謝!我想我也可以賦值如下:$ arr [0]; \t $ arr [1]; \t \t \t $ arr [2]; \t \t \t $ arr [3] – user3263892

+0

這就是你如何直接訪問特定元素,是的 –

+0

謝謝!我想將我的查詢轉化爲準備狀態以防止注射。我的IN(值)來自會話列表。我嘗試將連接會話存儲到$變量中以用作$ stmt-> bind_param(「s」,$ variable);但無濟於事。 – user3263892

3

如果你根本不需要數組(爲什麼不呢?),那麼只需要創建一個字符串容器,

然後不斷地串聯環路下面的字符串,然後最後回聲:

$participants = ''; // initialize 
while($row = $result->fetch_object()) { 
    $participants .= $row->parents . " "; 
       //^concat 
} 
echo $participants; 

在當前的代碼的問題是,每一個循環,$participants被覆蓋:

echo $participants = $row->parents." "; 
      // ^overwrites it every iteration 
相關問題