为了方便使用,我对mysqli方法进行了简单的封装:
<code><?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 '; } </code>
我的表的结构是这样的
<code>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)</code>
<code>mysql> select * from book; +----+----------+-------+----------+ | ID | name | price | validity | +----+----------+-------+----------+ | 1 | 高等数学 | 15.00 | onsale | | 2 | 线性代数 | 10.50 | unvalid | +----+----------+-------+----------+ 2 rows in set (0.00 sec) </code>
很显然,这个表只有4列,然而在测试输出的时候,用 mysqli_fetch_array() 取一行结果数组,发现数组竟然有8个元素,而且后面四个是空的,无法输出。把表调整为3列之后数组元素变为6个,说明问题可复现且有规律。
请问
1.为什么数组的元素数会变为列数的两倍? mysqli_fetch_array() 就是这么设计的吗?
2.在不知道表的所有列名的时候,怎么安全的遍历输出所有记录?
回复内容:
为了方便使用,我对mysqli方法进行了简单的封装:
<code><?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 '; } </code>
我的表的结构是这样的
<code>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)</code>
<code>mysql> select * from book; +----+----------+-------+----------+ | ID | name | price | validity | +----+----------+-------+----------+ | 1 | 高等数学 | 15.00 | onsale | | 2 | 线性代数 | 10.50 | unvalid | +----+----------+-------+----------+ 2 rows in set (0.00 sec) </code>
很显然,这个表只有4列,然而在测试输出的时候,用 mysqli_fetch_array() 取一行结果数组,发现数组竟然有8个元素,而且后面四个是空的,无法输出。把表调整为3列之后数组元素变为6个,说明问题可复现且有规律。
请问
1.为什么数组的元素数会变为列数的两倍? mysqli_fetch_array() 就是这么设计的吗?
2.在不知道表的所有列名的时候,怎么安全的遍历输出所有记录?
看这个就知道了PHP mysql_fetch_array() 函数
mysqli_fetch_array
有两个参数,第二个参数不指定的时候默认为产生关联和数字数组,会输出类似以下结构的数组
<code>Array ( [0] => Adams [LastName] => Adams [1] => John [FirstName] => John [2] => London [City] => London ) </code>
多插一句,从各种角度来看,数据库操作都推荐使用PDO

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

Dreamweaver CS6
视觉化网页开发工具