php - mysqli_fetch_array() 返回值数组的大小问题?

查看:85
本文介绍了php - mysqli_fetch_array() 返回值数组的大小问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

为了方便使用,我对mysqli方法进行了简单的封装:

<?php

class DatabaseAccesser {
    var $host;
    var $username;
    var $password;
    var $link;
    var $resultSet;
    
    function __construct()
    {
    $this->host = "localhost";
    $this->username = "hands";
    $this->password = "hands";
    }
    
    function __destruct()
    {
    mysqli_close($this->link);
    }
    
    function connect()
    {
    $this->link = mysqli_connect($this->host, $this->username, $this->password);
    if(!$this->link)
    {
        echo mysqli_connect_error();
    }
    }
    
    function select_datebase($database)
    {
    mysqli_select_db($this->link, $database);
    }
        
    function execute($sql)
    {
    $this->resultSet = mysqli_query($this->link, $sql);
    return $this->resultSet;
    }
    
    function getResultSet()
    {
    return $this->resultSet;
    }
    
    function fetch_result()
    {
    $row = mysqli_fetch_array($this->resultSet);
    return $row;
    }
    
}


$test = new DatabaseAccesser();
$test->connect();
$test->select_datebase("handsdb");
$sql = "select * from book";
$test->execute($sql);
$result = $test->fetch_result();

$count = count($result);
echo $count;                // 8
echo '<br />';
$size = sizeof($result);
echo $size;                // 8
echo '<br />';
for($i = 0; $i < $count; $i++)
{
    echo $result[$i];
    echo '<br />';
}

我的表的结构是这样的

mysql> describe book;
+----------+--------------------------+------+-----+---------+-------+
| Field    | Type                     | Null | Key | Default | Extra |
+----------+--------------------------+------+-----+---------+-------+
| ID       | int(11)                  | NO   | PRI | 0       |       |
| name     | varchar(7)               | NO   |     | NULL    |       |
| price    | decimal(6,2)             | NO   |     | NULL    |       |
| validity | enum('onsale','unvalid') | NO   |     | onsale  |       |
+----------+--------------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> select * from book;
+----+----------+-------+----------+
| ID | name     | price | validity |
+----+----------+-------+----------+
|  1 | 高等数学 | 15.00 | onsale   |
|  2 | 线性代数 | 10.50 | unvalid  |
+----+----------+-------+----------+
2 rows in set (0.00 sec)

很显然,这个表只有4列,然而在测试输出的时候,用 mysqli_fetch_array() 取一行结果数组,发现数组竟然有8个元素,而且后面四个是空的,无法输出。把表调整为3列之后数组元素变为6个,说明问题可复现且有规律。

请问
1.为什么数组的元素数会变为列数的两倍? mysqli_fetch_array() 就是这么设计的吗?
2.在不知道表的所有列名的时候,怎么安全的遍历输出所有记录?

解决方案

看这个就知道了PHP mysql_fetch_array() 函数

mysqli_fetch_array有两个参数,第二个参数不指定的时候默认为产生关联和数字数组,会输出类似以下结构的数组

Array
(
[0] => Adams
[LastName] => Adams
[1] => John
[FirstName] => John
[2] => London
[City] => London
) 

多插一句,从各种角度来看,数据库操作都推荐使用PDO

这篇关于php - mysqli_fetch_array() 返回值数组的大小问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆