当值= 0时,MySQL返回null?

时间:2015-10-21 22:10:36

标签: php mysql

这是一个奇怪的问题。执行查询时,它将返回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。

1 个答案:

答案 0 :(得分:1)

我认为这是问题所在:

$results[$k++] = array_flip(array_flip($out));

array_flip交换数组的键和值。数组键必须是唯一的。如果有两个具有相同值的元素,则翻转将尝试将它们都转换为相同的键,其中一个将被丢弃。当你将它翻转回来时,你最终只能使用其中一个。因此,如果您有多个值为0的字段,则在双击后您将只有其中一个。

只需使用:

$results[] = $out;

(不需要$k++,分配给$array[]将元素推送到数组的末尾。)