素材牛VIP会员
PHP mysql的操作,为什么要返回一个字符串数组,不返回真实的数据类型?
 雪***狐  分类:SQL代码  人气:1023  回帖:3  发布于6年前 收藏

http://www.php.net/manual/zh/mysqli-result.fetch-array.php

返回值
Returns an array of strings that corresponds to the fetched row or NULL if there are no more rows in resultset.

这里返回的是an array of strings,无论表中数据是整数还是浮点数,都是返回string类型的。为什么要这样设计?

这个带来的坏处就是JSON化的时候会都是string类型,导致数据不准确,必须手动去转化数据。

 标签:mysqlphp

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv1 新人
威***军 职业无 6年前#1

尤其在给APP写api的时候,这个问题比较麻烦,请问有什么方法可以解决?

Lv1 新人
闪***星 UI设计师 6年前#2

mysql返回的数据确实默认都是字符串,但是用json_encode函数将number转换后的json数据依然是带引号的,比如自己手动创建的数组$array=array('name'=>'jack','age'=>23);用json_encode($array)得到的是:{'name':'jack','age':'23'},所以前端js将json解析出来以后'23'还是字符串。

Lv5 码农
夏***t 移动开发工程师 6年前#3

你们大概都冤枉 PHP 了。

大部分编程语言都直接使用了 mysql 提供的 C 语言库。(也有很多语言使用自己写的库,比如 java,之前的版本适用的 C 语言库,后来的 JDBC 版本改成了用 Java 原生语言)。

在 mysql 的 C 语言库头文件中 mysql.h 定义了 mysql_fetch_row 函数:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

返回的类型是 MYSQL_ROW 类型。这个类型依然在 mysql.h 中定义:

typedef char **MYSQL_ROW;   /* return data as array of strings */

后面注释写的很详细了。


由于 C 语言没有关联数组,所以 mysql 的 C 语言库里没有提供 mysql_fetch_array函数,应该是 PHP 在 mysql_fetch_row 的基础上封装的。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取