请注意以下代码: CLASS
namespace hfdDB;
class HFD_DB
{
/**
* @return \mysqli
*/
public static function getConnection()
{
require_once('globals.php');
return new \mysqli(DBHOST, DBUSER, DBPASSWORD, DBNAME);
}
/**
*
*/
public static function getAllItems()
{
$conn = self::getConnection(); //open connection
$sql="SELECT * FROM HFD_ITEMS"; //command text
$cmdAllItems = $conn->prepare($sql); // command
$cmdAllItems->execute(); //execute command
$allItems = $cmdAllItems->get_result(); //assign result
echo $allItems->num_rows." rows returned<br>";
$itemsArray = []; //array for storing result rows
echo "result set (first row): ";
var_dump($allItems);
echo "<br>";
if (!empty($allItems) ) {
while ($item = $allItems->fetch_array(MYSQLI_ASSOC)) ;
{
echo "fetch result: ";
var_dump($item);
echo "<br>";
array_push($itemsArray, $item); //add to array
}
return json_encode($itemsArray); //return json
} else {
return "NO DATA"; //return error
}
}
================================== login.php ====
<?php
/**
* Created by PhpStorm.
* User: Mark
* Date: 1/10/2016
* Time: 7:08 PM
*/
require_once("HFD_DB.php");
$allItems_json = \hfdDB\HFD_DB::getAllItems();
if (!empty($allItems_json)) {
echo "Data: ";
echo $allItems_json;
} else {
echo "NO DATA";
}
和我的结果:(从phpStorm IDE运行时)
6730 rows returned
result set (first row):
object(mysqli_result)#3 (5)
{
["current_field"]=> int(0)
["field_count"]=> int(10)
["lengths"]=> NULL
["num_rows"]=> int(6730)
["type"]=> int(0)
}
fetch result: NULL
Data: [null]
注意:6370是此查询的预期行数。那么为什么我不循环6370遍循环?
我对Coding或SQL并不陌生,尽管我是PHP的新手。
我在这里缺少什么?
感谢。
答案 0 :(得分:0)
您获取了一个数组数组。你应该使用for - each循环。
while ($item = $allItems->fetch_array(MYSQLI_ASSOC)) ;
{
echo "fetch result: ";
var_dump($item);
echo "<br>";
array_push($itemsArray, $item); //add to array
}
运行一次,分配整个数组结构数组。 - &gt; fetch_array一次性获取所有内容,而不是像fetch_assoc。
ForEach (($allItems->fetch_array(MYSQLI_ASSOC)) as $Item)
{
echo "fetch result: ";
var_dump($item);
echo "<br>";
array_push($itemsArray, $item); //add to array
}
使用foreach迭代数组数组并将Named(Assoc)数组放入$ item变量中,这正是您所期望的。
答案 1 :(得分:0)
我发现我的问题很简单:json_encode需要第二个argyument:depth。事实证明,深度等于返回的最大行数。默认值为512.将代码更改为:
json_encode($itemsArray,10000)
修复了问题。