mysqli_fetch_assoc仅返回数组的第一个元素
我正在处理一个项目,其中登录的用户应该能够在主页上发布注释,并且正在登录的某些用户的注释应该被打印在新注释的上方形成。 我已经为此写了一个函数,其中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 />";
}
?>
1.You需要通过while()
2.Save所有数据遍历您result-set object
到array
,然后返回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 />";
}
?>
你可以得到所有的结果,像这样:
$arr = $result->fetch_all(MYSQLI_ASSOC);
或者使用while循环:
while($row = $result->fetch_assoc()){
echo $row['content'] . '<br />';
}
正确的点。+10 –
将数据保存到array
。通过foreach
或for
循环使用它。
$content = [];
while($row = mysqli_fetch_assoc($result)){
$content[] = $row['content'];
}
return $content;
正确的提高点。 +10 –
需要改变功能这样
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;
}
@Anant对不起,我只用了两次相同的变量 –
现在是正确的。我编辑了这部分。 +10也是。 –
你必须遍历。 问题是与此代码
$row = mysqli_fetch_assoc($result);
return $row;
改变,要
$x = array();
while($row = mysqli_fetch_assoc($result))
{
$x[] = $row;
}
return $x;
,而不用声明$连接全球通的$连接变量的函数,它会是一个有效的方法和得到的结果作为数组
<?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;
}
?>
现在这样调用
功能正确的一点。 +10 –
你必须创建数组,然后返回它来获取所有记录 –
你的意思是像'$ row = array();',那么查询?刚刚尝试,但它的工作方式相同。 – sklrboy