php - mysql_query 在返回时保留在表中创建的数据类型?

标签 php json mysql types

我在 mysql 中有一个表:

CREATE TABLE user (id INT, name VARCHAR(250));

我查询表:

$result = mysql_query("SELECT id,name FROM user");

我收集的结果:

while($row = mysql_fetch_assoc($result) $rv[] = $row;

然后我返回数据:

echo json_encode($rv);

问题是 id 返回为字符串而不是 int,甚至在 json_encode 之前。如果我强制 $row['id'] = (int)$row['id']; - 它工作正常。

如何强制 mysql 在 $row 中返回正确的数据类型?

10 倍。

最佳答案

不幸的是,对于 PHP <= 5.2,MySQL 函数/类(即 mysql_*mysqli_*PDO)是基于在 libmysql 上——一个 C 库,它提供与 MySQL 服务器通信的支持。

使用该库的函数总是返回字符串,即使对于整数和浮点列也是如此——对此您无能为力:唯一的解决方案是拥有一些“映射层”(如 ORM) 在 PHP 端“知道”每一列应该是哪种类型,并且每次从数据库中获取一些数据时都会进行转换。

注意:您插入数据的方式不会改变您在从数据库中获取数据时将获得字符串这一事实。


使用 PHP >= 5.3,与 MySQL 服务器通信的函数可以使用 mysqlnd(MySQL native 驱动程序)而不是 libmysql —— 不过,这必须在编译时配置。

在某些情况下,能够与“本地”数据类型通信是 mysqlnd 提供的好处之一;关于这一点,这篇文章应该有一些有趣的信息:PHP: New network traffic, CPU and memory savings with mysqlnd .


简而言之:

  • 在 PHP 5.2 中,您只能从数据库中获取字符串;你必须自己做一些类型转换
  • 使用 PHP 5.3,您可以获得原生数据类型——至少在某些情况下是这样。

关于php - mysql_query 在返回时保留在表中创建的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2317061/

相关文章:

类实例上的 PHP 闭包

PHP mod_fcgi 与 fastcgi_finish_request();

jquery - 如何增加 ASP.NET WebAPI Post 调用的 json 大小限制?

mysql - 如何将值拆分为多行(MySQL)

mysql - Hibernate HQL - 如果一个属性可能为空怎么办

mysql - MySQL中实现where条件varchar字段

php - 扩展 Laravel 5 核心功能

php - 通过单击链接或从复选框下拉列表中选择 "select-all",JQuery/Javascript 全选

javascript - JSON.stringify 不转换数组

javascript - Angular 2日期管