感谢我的回答,我发现我无法使用fetch_all()
,因为我正在使用PHP 5.2.17
- fetch_assoc
while
循环工作。
我正在使用的函数fetch_all
将返回此错误:
致命错误:在
中调用未定义的方法mysqli_result :: fetch_all()
$mysqli = new mysqli($host, $username, $password, $database);
$query = "LONG QUERY that works, tested in phpmyadmin"
$result = $mysqli->query($query);
$result->fetch_all(); or $mysqli->fetch_all() tried both
mysqli_fetch_all() was already tried.
$mysqli->close();
我能够连接到数据库,我已经拉了一行。当我将查询放在PHPMYADMIN中时,我得到5行。
这项功能是否有效?有没有办法可以将我的数据自己放入一个关联数组?
答案 0 :(得分:46)
此功能自PHP 5.3.0起可用。可能你的版本较旧。请改用fetch_assoc()
。
while ($row = $result->fetch_assoc()) {
// do what you need.
}
答案 1 :(得分:31)
mysqli::fetch_all()
需要安装mysqlnd
驱动程序才能使用它。
答案 2 :(得分:17)
构造关联数组的典型方法是while
循环:
$results_array = array();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
$results_array[] = $row;
}
答案 3 :(得分:10)
答案 4 :(得分:8)
作为Fabrizios答案的补充,请考虑使用循环构建阵列:
$array = array();
while($row = $result->fetch_assoc())
$array[] = $row;
答案 5 :(得分:2)
使用
强文$rows = mysqli_fetch_array($result, MYSQLI_ASSOC);
如果您不想使用 Karolis '回答进行迭代,则可以获得与$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
相同的结果。
您可以将常量更改为MYSQLI_NUM
或MYSQLI_BOTH
。
此可选参数是常量,指示应从当前行数据生成什么类型的数组。
通过使用MYSQLI_ASSOC常量,此函数的行为与mysqli_fetch_assoc()相同,而MYSQLI_NUM的行为与mysqli_fetch_row()函数相同。最后一个选项MYSQLI_BOTH将创建一个具有两者属性的单个数组。 http://php.net/manual/en/mysqli-result.fetch-array.php
答案 6 :(得分:1)
我有5.6,但无论如何都不适合我。通过启用mysqlnd驱动程序,它对我有用。只需写apt-get install php5-mysqlnd
然后重启php就可以了!
答案 7 :(得分:1)
问题似乎是'mysqli'和'mysqlnd'不能一起工作。我在cpanel中也遇到了同样的问题。在回答之后,我发现here对我有所帮助。
步骤:
1)转到CPanel仪表板
2)转到“选择PHP版本”,您应该看到一堆复选框
3)设置PHP版本(5.4或更高版本)
4)取消选中“ mysqli”扩展名,并同时选中“ mysqlind”和“ nd_mysqli”
显然,“ nd_mysqli”是“ mysqli”,但配置为与“ mysqlind”一起使用,要使其正常工作,由于设置冲突,您必须取消选中“ mysqli”。
答案 8 :(得分:0)
PHP致命错误:调用未定义的函数mysqli_fetch_all()
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);//not work
更改为:php 5.3或
$query = "SELECT * FROM `user_counter` ORDER BY id DESC LIMIT 20";
$result = mysqli_query($connection, $query) or die
("Error in Selecting " . mysqli_error($connection));
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
echo json_encode($rows);
答案 9 :(得分:0)
只需添加有关mysqlnd
驱动程序的其他说明:它还必须安装mysqli
API扩展程序。如果没有扩展程序,fetch_all()
仍然无法使用。我在解决为什么我的代码在一台服务器而不是另一台服务器上工作时发现了这一点,PHP> 5.3。使用phpinfo()
验证已安装的扩展程序。
答案 10 :(得分:0)
function runQuery($query) {
$result = mysqli_query($this->conn,$query);
$resultset = array(); //you need to define array
while($row=$result->fetch_assoc()) {
$resultset[] = $row; //then insert result into the array
}
if(!empty($resultset))
{
return $resultset;}
else{return 'empty';};
}