这是一个奇怪的问题。执行查询时,它将返回null,其中找到值0(类型为int)。
这是我的mysql函数:
public function query( $query_string, $params = null, $param_types = null) {
//prepare the statement
$stmt = $this->db->prepare($query_string);
//check if the sql query is wrong.
if($stmt === false) {
echo "Wrong SQL: " . $query_string;
if(DEBUG)
echo "<br />Error: " . $this->db->errno . " " . $this->db->error;
return;
}
if($params != null && $param_types != null) {
//build the array that needs to pass the args to bind_param.
$a_params = array();
$a_params[] = &$param_types;
for($i=0; $i<count($params); $i++)
$a_params[] = &$params[$i];
// $stmt->bind_param('s', $param); equivalent
call_user_func_array(array($stmt, 'bind_param'), $a_params);
}
//run the query
$stmt->execute();
//bind the result
$data = $stmt->result_metadata();
$fields = $out = $results = array();
$count = 0;
$k = 0;
if( $data != null ) {
while($field = $data->fetch_field())
$fields[$count++] = &$out[$field->name];
call_user_func_array(array($stmt, 'bind_result'), $fields);
// fetch the result
while ($stmt->fetch())
$results[$k++] = array_flip(array_flip($out));
}
$stmt->close();
return $results;
}
}
MySQL查询:
public function getMenuItems( $id ) {
$items = $this->db->query("SELECT id, menu, parent_id, name, url, external, position FROM menu_meta WHERE menu = ? ORDER BY position ASC", array($id), "i");
return $items;
}
我的数据库在表格中有以下项目: https://gyazo.com/d9a0a9472b0b51d43aafeafdd28a75c8
如您所见,我需要显示0的值。它们不是空的!
使用json_encode这是输出:
[{"menu":1,"position":0,"name":"Home","url":"..\/"},{"id":5,"menu":1,"parent_id":2,"name":"Add New","url":"#","position":0},{"id":2,"position":1,"external":0,"name":"Customers","url":"..\/?page=customers"},{"id":3,"menu":1,"external":0,"name":"Subscriptions","url":"..\/?page=subscriptions","position":2},{"id":4,"menu":1,"external":0,"name":"Billing","url":"..\/?page=billing","position":3}]
这是服务器的配置问题吗?或许是我的PHP版本的东西?
编辑:没有#34; null&#34;但完全没有关键+值。 JSON中的第一个条目是缺少键&#34; id&#34;因为价值为0.其他的都缺失了#34; parent_id&#34;因为值为0。
答案 0 :(得分:1)
我认为这是问题所在:
$results[$k++] = array_flip(array_flip($out));
array_flip
交换数组的键和值。数组键必须是唯一的。如果有两个具有相同值的元素,则翻转将尝试将它们都转换为相同的键,其中一个将被丢弃。当你将它翻转回来时,你最终只能使用其中一个。因此,如果您有多个值为0
的字段,则在双击后您将只有其中一个。
只需使用:
$results[] = $out;
(不需要$k++
,分配给$array[]
将元素推送到数组的末尾。)