2013-10-12 84 views
1

任何想法爲什麼這顯示空結果?我猜這與我在查詢之前放置$ link的位置有關,但必須這樣做,對嗎?mysqli_fetch_array閱讀結果爲空?

function getcatposts($cat_id) { 
$qc = @mysqli_query($link, "SELECT * FROM topics WHERE topic_cat='$cat_id'"); 
while($row = mysqli_fetch_array($qc)) { 
    $topic_title=$row['topic_subject']; 
    $topic_id=$row['topic_id']; 
} 
$qc2 = @mysqli_query($link, "SELECT * FROM categories WHERE cat_id='$cat_id'"); 
while($row2 = mysqli_fetch_array($qc2)) { 
    $cat_name=$row2['cat_name']; 
} 

更新代碼:

function getcatposts($cat_id) { 
$link = mysqli_connect("localhost", "lunar_lunar", "", "lunar_users"); 
$qc = mysqli_query($link, "SELECT * FROM topics WHERE topic_cat='$cat_id'"); 
while($row = mysqli_fetch_array($qc)) { 
    $topic_title=$row['topic_subject']; 
    $topic_id=$row['topic_id']; 
} 
$qc2 = mysqli_query($link, "SELECT * FROM categories WHERE cat_id='$cat_id'"); 
while($row2 = mysqli_fetch_array($qc2)) { 
    $cat_name=$row2['cat_name']; 
} 
echo $cat_name; 
echo '<br />'; 
echo $topic_title; 
echo '<br />'; 
echo $topic_id; 
} 

新的問題是,它顯示是這樣的: http://gyazo.com/43e8a91b9e0cf4f5e413536907891dcf.png 當DB看起來是這樣的: http://gyazo.com/1ead8bd0f150838dae3ee4a476419679.png

應該展示他們的所有三個這是一個函數,意味着它將繼續重做所有的代碼,直到它不能再查詢數據爲止。有任何想法嗎?

+2

爲了解決這個問題,刪除錯誤抑制運算符('@')並將您的語句更改爲'$ qc = mysql_query(...)或die(mysql_error());'。另外,'$ link'在你的函數範圍內是不可訪問的,你必須把它作爲另一個函數參數傳遞。在函數內部執行'var_dump($ link)'會告訴你。 –

+0

這裏聞起來像一個SQL注入。 –

+0

它最終是因爲我在函數之外聲明瞭$ link。雖然現在它不能正常工作。它只顯示一次,當它應該顯示三件事。我會更新這篇文章。 –

回答

1

這裏的問題是,您正嘗試在您的循環之外回顯值。循環中的變量將在每次迭代時被覆蓋,並且在循環結束時,變量將保存最後一次迭代的值。

如果你想顯示所有的值,移動echo聲明你的循環裏面,像這樣:

while($row = mysqli_fetch_array($qc)) 
{ 
    $topic_title = $row['topic_subject']; 
    $topic_id = $row['topic_id']; 
    echo $topic_title.'<br/>'; 
    echo $topic_id.'<br/>'; 
} 

$qc2 = mysqli_query($link, "SELECT * FROM categories WHERE cat_id='$cat_id'"); 

while($row2 = mysqli_fetch_array($qc2)) 
{ 
    $cat_name = $row2['cat_name']; 
    echo $cat_name.'<br/>'; 
} 

如果你關心的順序,你可以存儲title S,id S和cat_name小號在像這樣的數組:

while($row = mysqli_fetch_array($qc)) 
{ 
    $topic_title[] =$row['topic_subject']; 
    $topic_id[] = $row['topic_id']; 
} 
$qc2 = mysqli_query($link, "SELECT * FROM categories WHERE cat_id='$cat_id'"); 
while($row2 = mysqli_fetch_array($qc2)) 
{ 
    $cat_name[] =$row2['cat_name']; 
} 

然後遍歷它們:

for ($i=0; $i < count($topic_id); $i++) { 
    if(isset($topic_id[$i], $topic_title[$i], $cat_name[$i])) 
    { 
     echo $cat_name[$i].'<br/>'; 
     echo $topic_title[$i].'<br/>'; 
     echo $topic_id[$i].'<br/>'; 
    } 
} 
1

你的函數只顯示一個結果,因爲你的回聲在while循環之外...... 把Echo語句放到循環中,否則你只打印最後的結果!

while($row = mysqli_fetch_array($qc)) { 
    $topic_title=$row['topic_subject']; 
    $topic_id=$row['topic_id']; 
    echo $topic_title; 
    echo '<br />'; 
    echo $topic_id; 
} 
$qc2 = mysqli_query($link, "SELECT * FROM categories WHERE cat_id='$cat_id'"); 
while($row2 = mysqli_fetch_array($qc2)) { 
    $cat_name=$row2['cat_name']; 
    echo $cat_name; 
    echo '<br />'; 
}