2013-10-12 48 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 />'; 
}