首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql_query是否在返回时保留在表中创建的数据类型?

问mysql_query是否在返回时保留在表中创建的数据类型?
EN

Stack Overflow用户
提问于 2010-02-23 17:41:26
回答 2查看 773关注 0票数 5

我在mysql中有一个表:

代码语言:javascript
复制
CREATE TABLE user (id INT, name VARCHAR(250));

我查询表:

代码语言:javascript
复制
$result = mysql_query("SELECT id,name FROM user");

我收集结果:

代码语言:javascript
复制
while($row = mysql_fetch_assoc($result) $rv[] = $row;

然后我返回数据:

代码语言:javascript
复制
echo json_encode($rv);

问题是id返回为字符串而不是int,甚至在json_encode之前也是如此。如果我强制$row‘it’=(Int)$row‘it’;-它工作得很好。

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

10倍。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-23 17:58:22

PDO->bindColumn能做到吗?

代码语言:javascript
复制
$stmt = $dbh->prepare($sql);

$stmt->bindColumn('int_col', $intVar, PDO::PARAM_INT);
$stmt->bindColumn('string_col', $strVar, PDO::PARAM_STR);

$stmt->execute();

$stmt->fetch(PDO::FETCH_BOUND);

$intVar将自动转换为int

票数 2
EN

Stack Overflow用户

发布于 2010-02-23 20:10:18

不幸的是,在PHPmysql5.2中,MySQL函数/类(即mysql_*、mysqli_*和PDO)是基于libmysql的--这是一个提供与MySQL服务器通信支持的C库。

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

注意:插入数据的方式不会改变从DB获取数据时获得字符串的事实。

在PHPlibSQL5.3中,与MySQL服务器通信的函数可以使用MySQL本地驱动程序( mysqlnd )而不是libmysql --不过这必须在编译时配置。

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

长话短说:

  • 使用PHP5.2,您只能从数据库获取字符串;并且您必须自己进行一些类型转换
  • 使用PHP5.3,您可能会获得原生数据类型--至少在某些情况下是这样。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2317061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档