2016-07-27 199 views
2

我正在处理一个项目,其中登录的用户应该能够在主页上发布注释,并且正在登录的某些用户的注释应该被打印在新注释的上方形成。 我已经为此写了一个函数,其中mysqli_query可以识别我所有的6个条目,但mysqli_fetch_assoc只打印出6中的第一个音符。我能做什么错?这里是我的代码:mysqli_fetch_assoc仅返回数组的第一个元素

<?php  
 
    function find_notes_by_id($user_id) { 
 
\t global $connection; 
 
\t 
 
\t $safe_user_id = mysqli_real_escape_string($connection, $user_id); 
 
\t 
 
\t $query = 'SELECT content '; 
 
\t $query .= 'FROM notes '; 
 
\t $query .= 'WHERE user_id = '.$safe_user_id; 
 
\t $result = mysqli_query($connection, $query); 
 
    
 
\t //mysqli_result Object ([current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 6 [type] => 0) 
 

 
\t confirm_query($result); 
 

 
\t $row = mysqli_fetch_assoc($result); 
 
\t //Array ([content] => First!) = it only shows the very first element 
 
\t return $row; 
 
} 
 
?> 
 

 
<?php 
 
$notes_set = find_notes_by_id($userRow['id']); 
 
    foreach($notes_set as $note){ 
 
\t echo $note; 
 
\t echo "<br />"; 
 
    } 
 
?>

enter image description here

+1

你必须创建数组,然后返回它来获取所有记录 –

+0

你的意思是像'$ row = array();',那么查询?刚刚尝试,但它的工作方式相同。 – sklrboy

回答

2

1.You需要通过while()

2.Save所有数据遍历您result-set objectarray,然后返回array得到所有记录

像下面: -

<?php  
    function find_notes_by_id($user_id) { 
    global $connection; 

    $safe_user_id = mysqli_real_escape_string($connection, $user_id); 

    $query = "SELECT `content` FROM `notes` WHERE `user_id` = $safe_user_id"; 
    $result = mysqli_query($connection, $query); 

    confirm_query($result); 

    $final_data = array(); // create an array 
    while($row = mysqli_fetch_assoc($result)){ // iterate over the result-set object to get all data 
     $final_data[] = $row; //assign value to the array 
    } 
    return $final_data; // return array 
    } 
?> 

现在: -

<?php 
$notes_set = find_notes_by_id($userRow['id']); 

print_r($notes_set) ; // print result to check array structure so that you can use it correctly in foreach 
    foreach($notes_set as $note){ 
    echo $note['content']; 
    echo "<br />"; 
    } 
?> 
+0

现在它检索所有笔记,但它在第二部分的'echo $ note;'签名为“数组到字符串转换”,为什么? – sklrboy

+0

'echo $ note ['content'];'是解决方案。非常感谢你的帮助! – sklrboy

+0

@sklrboy欢迎。欢呼:) :)。很高兴帮助你。同时,如果他们也有用,也可以对其他人投票。 –

3

你可以得到所有的结果,像这样:

$arr = $result->fetch_all(MYSQLI_ASSOC); 

或者使用while循环:

while($row = $result->fetch_assoc()){ 
    echo $row['content'] . '<br />'; 
} 
+0

正确的点。+10 –

1

将数据保存到array。通过foreachfor循环使用它。

$content = []; 
while($row = mysqli_fetch_assoc($result)){ 
    $content[] = $row['content']; 
} 
return $content; 
+1

正确的提高点。 +10 –

1

需要改变功能这样

function find_notes_by_id($user_id) { 
    global $connection; 

    $safe_user_id = mysqli_real_escape_string($connection, $user_id); 

    $query = 'SELECT content '; 
    $query .= 'FROM notes '; 
    $query .= 'WHERE user_id = '.$safe_user_id; 
    $result = mysqli_query($connection, $query); 

    //mysqli_result Object ([current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 6 [type] => 0) 

    confirm_query($result); 
    $row = array(); 
    while($result1 = mysqli_fetch_assoc($result)){ 
     //Array ([content] => First!) = it only shows the very first element 
     $row[] = $result1; 
    } 
    return $row; 
} 
+0

@Anant对不起,我只用了两次相同的变量 –

+0

现在是正确的。我编辑了这部分。 +10也是。 –

1

你必须遍历。 问题是与此代码

$row = mysqli_fetch_assoc($result); 
return $row; 

改变,要

$x = array(); 
while($row = mysqli_fetch_assoc($result)) 
{ 
    $x[] = $row; 
} 
return $x; 
+0

它将仅返回最后一个值而不是全部结果。想一想你的逻辑。 –

+0

你好我错过了数组符号 – Athar

+0

现在你是对的。 +10 –

1

,而不用声明$连接全球通的$连接变量的函数,它会是一个有效的方法和得到的结果作为数组

<?php  
      function find_notes_by_id($user_id,$connection) { 

      $safe_user_id = mysqli_real_escape_string($connection, $user_id); 

      $query = 'SELECT content '; 
      $query .= 'FROM notes '; 
      $query .= 'WHERE user_id = '.$safe_user_id; 
      $result = mysqli_query($connection, $query); 


      confirm_query($result); 

     $data = array(); // create an array 
     while($row = mysqli_fetch_assoc($result)){ 
     $data[] = $row; 
    } 
     return $data; 
     } 
     ?> 

现在这样调用

功能
+0

正确的一点。 +10 –

相关问题