使用PHP控制结构

时间:2011-01-13 22:15:32

标签: php controls while-loop

  

可能重复:
  Help with PHP While function

嗨,

为什么这不起作用?

<?php 
$select = "select * from messages where user='$u'";

$query = mysqli_query($connect,$select) or die(mysqli_error($connect));

$row = mysqli_num_rows($query);

$result = mysqli_fetch_assoc($query);

$title = mysqli_real_escape_string($connect,trim($result['title']));

$message = mysqli_real_escape_string($connect,trim($result['message']));

while(($result = mysqli_fetch_assoc($query))){
echo $title;
echo '<br/>';
echo '<br/>';
echo $message;
}

?>

这在哪里工作 -

<?php

echo $title;

?>

5 个答案:

答案 0 :(得分:1)

变化

while(($result = mysqli_fetch_assoc($query))){ 

while($row = mysqli_fetch_assoc($result)){ 

<强>更新

<?php
$query = "select * from messages where user='$u'";
$result = mysqli_query($connect,$query) or die(mysqli_error($connect));
$number_of_rows = mysqli_num_rows($result);
while($row = mysqli_fetch_assoc($result)){
    $title = trim($row['title']);
    $message = trim($row['message']);
    echo $title;
    echo '<br/>';
    echo $message;
    echo '<br/>';
}
?> 

答案 1 :(得分:0)

除了dqhendricks的建议,你永远不会使用你的返回值。而不是

while ( $result = mysqli_fetch_assoc($query) ){
  echo $title;
  echo '<br/>';
  echo '<br/>';
  echo $message;
}

使用

while ( $row = mysqli_fetch_assoc($result) ){
  echo mysqli_real_escape_string($connect,trim($result['title']));
  echo '<br/>';
  echo '<br/>';
  echo mysqli_real_escape_string($connect,trim($result['message']));
}

您还:

  • 从不使用mysqli_num_rows
  • 的结果
  • 如果在while循环之前是null
  • ,则抓取一个关联数组而不进行测试

答案 2 :(得分:0)

如果你的查询返回1行,则while中的条件总是为假(你已经在$result = mysqli_fetch_assoc($query);上面的几行上面提取了第一行。另外,你只分配$ title一次,所以即使{{1循环执行,它将始终打印第一个标题 你为什么逃避结果???通常while用于转义查询参数,而不是结果。

答案 3 :(得分:0)

这里有些问题:

1)确保你正确地消毒$ u - 它不清楚它来自哪里,但如果它是用户输入,你需要逃避它。

2)你正在使用mysqli函数错误。典型的方法是:

//define a query
$sql = 'SELECT .. FROM ...';

//query the database to obtain a result
$result  = mysqli_query($sql);

//iterate over the result, fetching rows as associative arrays.
while ($row = mysqli_fetch_assoc($result)){
   echo "Foo = " . $row['foo'] ."!<br/>";
}

3)目前尚不清楚为什么要对从数据库中获取的值使用real_escape。您可能需要htmlspecialchars()代替。

答案 4 :(得分:0)

这不起作用,因为您在设置其值之前使用了结果数组。

从技术上说,这应该会运行,但它看起来并没有给出预期的结果。

尝试用$ result ['title']替换$ title。