mysql foreach 报错_为何用mysqli类时foreach只能取出一行,而while循环取出多行数据?...

我是新手,有个问题请帮忙,就是用mysqli类,数据表test中有5行数据,用foreach函数只能取出第一行,其他的都取不出来,而用while就可以取出5行,为何?

回复讨论(解决方案)

foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}

这样写实现的功能是:循环输出第一行的所有列的数据。

$rs->fetch_row()返回的是数组。

foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}

foreach($rs->fetch_array() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}

你的$rs->fetch_row()就只有一行数据,要用while循环循环读取出来。

foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}

这样写实现的功能是:循环输出第一行的所有列的数据。

$rs->fetch_row()返回的是数组。

我也考虑过是个二维数组,用

foreach($rs->fetch_row() as $v2){

foreach($v2 as $v3){

print_r( $v3);

}

}

但是报错

foreach($rs->fetch_row() as $key=>$v2){ print_r( $v2); //这里只能取出第一行数据 }

你foreach()里面的东西本身就有问题了,$rs->fetch_row()只取出了一行吧

错误提示:Warning: Invalid argument supplied for foreach() in D:\www\mysqli.php on line 13

网上说foreach的效率while高,所以用foreach,如果问题出在re->fetch_array这里,那while应该也不会读出来多行数据?

引用 1 楼 yupengbo 的回复:

foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}

这样写实现的功能是:循环输出第一行的所有列的数据。

$rs->fetch_row()返回的是数组。

我也考虑过是个二维数组,用

foreach($rs->fetch_row() as ……

这个还是不对啊!

foreach($rs->fetch_row() as $v2)

当你打印$v2的时候,打印出来的是第一行中的每一列的数据,

是个字符串,不是数组。

这种情况下,你再foreach($v2 as $v3)的话肯定会报错啊!

while($ary=$rs->fetch_row())

{

foreach($ary as $key=>$v2){

print_r($v2);

}

}

这样是可以的。

yupengbo 说的很对,是不是可以得出个结论while是可以行数据和列数据都遍历,而foreach只能遍历列数据????

可以这样理解 $rs->fetch_row() 这个相当于一个指针 第一次指向 0

所以while读取$rs->fetch_row() 是有数据出来的,读出来继续下一次的时候 $rs->fetch_row()这个指针会向下移一位。直到读不出数据才会结束。

foreach($rs->fetch_row() as $v2)里面的$rs->fetch_row() 仅仅当作一个数组来处理 把里面的一行数组读完就结局了。不会在循环的从$rs->fetch_row() 读取数据

这样应该可以一次性读取出来

foreach($rs->fetch_all() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}

嗯,

foreach是在数组内部循环,

注意你第一个foreach那个循环, fetch_row只运行了一次,

而while那个循环,fetch_array是运行了5次

无语,你应该写

foreach($rs as $row)

printf_r($row);

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基本的 MySQL 数据库增删改查全能类的示例代码: ```php class MySQLDB { private $host; private $username; private $password; private $database; private $conn; public function __construct($host, $username, $password, $database) { $this->host = $host; $this->username = $username; $this->password = $password; $this->database = $database; $this->connect(); } public function connect() { $this->conn = mysqli_connect($this->host, $this->username, $this->password, $this->database); if (!$this->conn) { die("Connection failed: " . mysqli_connect_error()); } } public function query($sql) { $result = mysqli_query($this->conn, $sql); if (!$result) { die("Query failed: " . mysqli_error($this->conn)); } return $result; } public function select($table, $columns = "*", $where = "") { $sql = "SELECT $columns FROM $table"; if ($where != "") { $sql .= " WHERE $where"; } return $this->query($sql); } public function insert($table, $data) { $columns = ""; $values = ""; foreach ($data as $column => $value) { $columns .= "$column,"; $values .= "'$value',"; } $columns = rtrim($columns, ","); $values = rtrim($values, ","); $sql = "INSERT INTO $table ($columns) VALUES ($values)"; return $this->query($sql); } public function update($table, $data, $where = "") { $sql = "UPDATE $table SET "; foreach ($data as $column => $value) { $sql .= "$column='$value',"; } $sql = rtrim($sql, ","); if ($where != "") { $sql .= " WHERE $where"; } return $this->query($sql); } public function delete($table, $where = "") { $sql = "DELETE FROM $table"; if ($where != "") { $sql .= " WHERE $where"; } return $this->query($sql); } public function close() { mysqli_close($this->conn); } } ``` 这个类包含了连接数据库、执行 SQL 查询、插入数据、更新数据、删除数据和关闭连接的基本操作。使用示例代码如下: ```php $db = new MySQLDB("localhost", "root", "password", "mydatabase"); // 查询 $result = $db->select("mytable", "*", "id=1"); while ($row = mysqli_fetch_assoc($result)) { echo $row["column1"] . " " . $row["column2"] . "<br>"; } // 插入 $data = array("column1" => "value1", "column2" => "value2"); $db->insert("mytable", $data); // 更新 $data = array("column1" => "newvalue1", "column2" => "newvalue2"); $db->update("mytable", $data, "id=1"); // 删除 $db->delete("mytable", "id=1"); $db->close(); ``` 以上代码用于连接名为 `mydatabase` 的 MySQL 数据库,并执行查询、插入、更新和删除操作,最后关闭连接。您可以根据自己的需求修改这个类和使用示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值