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 - 使用数据表时,表中的记录计数未正确显示

在 "IN"子句中使用的 MySQL JSON 数组?

ios - 排除HandyJSON中的属性

php - Yii2 Transaction- 更新之前未提交的值加上新的提交值?

php - 带有 Composer 的交互式 PHP 脚本

php - 使用从 mysql 查询接收到的 bool 值来更新值

python - Pandora Api auth.partnerLogin 给出错误

php - 如何从mysql内部联接查询中过滤结果

php - 如何通过单击按钮删除某些表格行

php - 有没有办法用子句 "inner join,"连接两个表,然后是多个 "left join"子句