我在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‘it’=(Int)$row‘it’;-它工作得很好。
如何强制mysql在$row中返回正确的数据类型?
10倍。
发布于 2010-02-23 17:58:22
PDO->bindColumn能做到吗?
$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
发布于 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。
长话短说:
https://stackoverflow.com/questions/2317061
复制相似问题