我收到通知:未定义的偏移:当我尝试输出数据库表中的每一行时出现0错误。代码有问题吗?
$mysqli = new mysqli('localhost', 'root', '', 'databasename');
$query = "SELECT * FROM tablename";
if ($result = $mysqli->query($query)) {
$i = 0;
while ($row = $result->fetch_assoc()) {
printf ($row[$i]); //output: Notice: Undefined offset: 0 in C:\wamp\www\helloworld.php on line 19
$i++;
}
}
答案 0 :(得分:3)
$row
并从数据库中返回一行数据 - 不需要递增它 - 也不会有超过零的索引 - 除非您的查询使用列名或数字的别名。它只是数据库中的一行,并且在while循环的每次迭代中,它都是下一行。
$query = "SELECT * FROM tablename";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
printf ($row);
//output: Notice: Undefined offset: 0 in
// C:\wamp\www\helloworld.php on line 19
}
}
fetch_assoc
和fetch_array
之间的区别很简单。当你fetch_assoc时,它将返回包含你正在选择的列的索引的行(如果你使用它们,则返回它们的别名),而fetch_array只返回一个数字排序的数组。
答案 1 :(得分:1)
fetch_assoc不返回行号索引,它返回列名作为索引。
试试这段代码
while($row = $result->fetch_assoc()){
echo $row['column_name'];
}
编辑: 用于回显所有列名称和值:
while($row = $result->fetch_assoc()){
foreach($row as $key => $value){
echo 'Column Name : '.$key.' => Value: '.$value .'<br>';
}
}
答案 2 :(得分:1)
使用它可以帮助你
$mysqli = new mysqli('localhost', 'root', '', 'databasename');
$query = "SELECT * FROM tablename";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_array()) {
foreach($row as $row_val)
{
print($row_val);
}
//or instead of foreach direcly use print_r($row);
}
}
答案 3 :(得分:1)
在您的代码中,使用fetch_assoc()
代替fetch_array()
不仅仅是问题。您使用$i=0
并将其递增至number of rows fetched
。然后用它来检索column
。那就是你打印第一行的第一列,第二行的第二列,第三行的第三列等等。然后,如果表只有3 columns
并且选择查询返回10 rows
个数据,剩余的7行将导致循环中的无效列,并将导致未定义的索引错误。
您可以使用foreach
试试这个
$mysqli = new mysqli('localhost', 'root', '', 'databasename');
$query = "SELECT * FROM tablename";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
foreach ($row as $key=>$value) {
echo $value.', '; //output: Notice: Undefined offset: 0 in C:\wamp\www\helloworld.php on line 19
}
}