Pdo为何把我们int型都转换成string型了,能不能让他不转???

十一文 2012-07-24 02:50:27


要设置什么参数??

这个设计是基于什么考虑???有点小坑爹啊

...全文
524 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
digidea 2013-09-14
  • 打赏
  • 举报
回复
同样是转 JSON 时遇到这个问题, 后来发现 json_encode() 有一个参数 JSON_NUMERIC_CHECK.
fixopen 2013-08-25
  • 打赏
  • 举报
回复
成功解决这个问题,汇报一下。 首先,在以前的MySQL中还真是不能解决的。它直接返回字符串给外部系统。稍微新一点的MySQL和客户端驱动可以直接内部的本地类型而不再进行内部转换为字符串了。有了这个基础,就有解决的可能了。 其次,PDO::ATTR_STRINGIFY_FETCHES对于MySQL来说是无关的,要使用PDO::ATTR_EMULATE_PREPARES(设为FALSE)来告诉MySQL端不要进行转换。 最后,当然是用PDO::ATTR_STRINGIFY_FETCHES告诉PHP也不要进行转换了。 至此,问题解决。
fixopen 2013-08-25
  • 打赏
  • 举报
回复
getColumnMeta(columnIndex)返回的列元信息里面倒是有正确的类型,但是有两个问题: 一、它采用列索引而不是列名作为参数,跟我的读取凡是不符合 二、官网上说不要使用这个函数,它可能在任何时候不做任何通知而进行规格更改
fixopen 2013-08-25
  • 打赏
  • 举报
回复
这个问题是挺操蛋的。我也没有找到解决办法。 $db = new PDO('mysql:host=' . $host . ';port=3306;dbname=' . $dbname, $username, $password, array(PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_STRINGIFY_FETCHES => FALSE)); $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, FALSE); $query = "SELECT `name`, `boss`, `madeTime`, `rules`, `id` FROM `company`"; $r = $db->query($query); $r->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, FALSE); while ($row = $r->fetch(PDO::FETCH_OBJ)) { $row['id']; //type is string!!!! } 据说,蓝色代码是设定它不自动转换为字符串的,但是,无效。红色代码运行时直接告诉我不支持。 别告诉我说PHP自动给我转换类型的屁话。我要把$row转换为JSON,都转换成字符串类型了……
改一下昵称 2012-07-24
  • 打赏
  • 举报
回复
从mysql数据库返回的查询结果都是文本,都会被当成字符串处理,因为PHP并不知道你的表结构。 mysqli和pdo都是这样!
十一文 2012-07-24
  • 打赏
  • 举报
回复
也许是我的代码逻辑哪里有问题吧

但是pdo这种 数据库的int返回的string的情况真的给我带来不少麻烦

mysqli 可没这样的问题
十一文 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

除了 false == 外,没有什么与数据类型的相关的
况且 false == 应写作 false === ,这样才真正与类型相关
[/Quote]

按照原理 "1" == 1 但是 我这里 return "1"==1 就是false,非得 intval哈才是false

这里不是问题

问题是做算术运算的是 “10”- 5 这样的头疼,我都是强制intval了就好了
xuzuning 2012-07-24
  • 打赏
  • 举报
回复
除了 false == 外,没有什么与数据类型的相关的
况且 false == 应写作 false === ,这样才真正与类型相关
十一文 2012-07-24
  • 打赏
  • 举报
回复


public function setGBK() {
$sql = sprintf( "set names 'gbk'" );
$this->conn->exec( $sql );
}
public function setBinary() {
$sql = sprintf( "set character_set_client=binary" );
$this->conn->exec( $sql );
}
public function doExec($sql){
$sql = sprintf($sql);
$this->conn->exec( $sql );
}


public function query( $sql, $param ) {
if( empty( $sql ) || empty( $this->conn ) )
{
return array();
}
$result = $this->conn->prepare( $sql );
if ( false == $result->execute($param) )
{
return array();
}
$result->setFetchMode( PDO::FETCH_ASSOC );
$row = $result->fetch();
if( $row )
{
return $row;
}else {
return array();
}
}
public function querys( $sql, $param ) {
if( empty( $sql ) || empty( $this->conn ) )
{
return array();
}
$result = $this->conn->prepare( $sql );
if ( false == $result->execute($param) )
{
return array();
}
$result->setFetchMode( PDO::FETCH_ASSOC );
$rows = $result->fetchAll();
return $rows;
}
gwn1902 2012-07-24
  • 打赏
  • 举报
回复
请帖出代码
zx3305 2012-07-24
  • 打赏
  • 举报
回复
给点实例啊,楼主
一起混吧 2012-07-24
  • 打赏
  • 举报
回复
代码没看到,在这里真难猜。
十一文 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

php 会根据上下文自动转换数据类型。不需劳你费神
[/Quote]

我做判断的是 不行了 ==
再如果 两者要做 计算就不行了!
kyzy_yy_pm 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 4 楼 的回复:

在不同的应用程序间就换数据时,传递的只能是文本。

不清楚你想弄明白什么
意思说我只能自己转换类型了?
[/Quote]
从库里出来的都是字符串
xuzuning 2012-07-24
  • 打赏
  • 举报
回复
php 会根据上下文自动转换数据类型。不需劳你费神
十一文 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

在不同的应用程序间就换数据时,传递的只能是文本。

不清楚你想弄明白什么
[/Quote]意思说我只能自己转换类型了?
十一文 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

Pdo为何把我们int型都转换成string型了

这块的代码是指bindParam吗?
[/Quote]最后从数据库返回的数据
xuzuning 2012-07-24
  • 打赏
  • 举报
回复
在不同的应用程序间就换数据时,传递的只能是文本。

不清楚你想弄明白什么
kyzy_yy_pm 2012-07-24
  • 打赏
  • 举报
回复
Pdo为何把我们int型都转换成string型了

这块的代码是指bindParam吗?
十一文 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你需要在传参时候设置它的类型,当然了,可以设置成-1,你设置了吗
[/Quote]不明白 能给个示例代码吗?或者 哪个地方有讲解给个地址
加载更多回复(1)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧