相关疑难解决方法(0)

PHP json_encode将数字编码为字符串

我有一个PHP json_encode函数的问题.它将数字编码为字符串,例如

array('id' => 3)
Run Code Online (Sandbox Code Playgroud)

"{ ["id": "3", ...)
Run Code Online (Sandbox Code Playgroud)

当js遇到这些值时,它会将它们解释为字符串,并且数值操作会失败.有谁知道一些方法来防止json_encode编码数字作为字符串?谢谢!

javascript php json

132
推荐指数
5
解决办法
12万
查看次数

MySQL整数字段在PHP中以字符串形式返回

我在MySQL数据库中有一个表字段:

userid INT(11)
Run Code Online (Sandbox Code Playgroud)

所以我用这个查询将它调用到我的页面:

"SELECT userid FROM DB WHERE name='john'"
Run Code Online (Sandbox Code Playgroud)

然后为了处理结果我做:

$row=$result->fetch_assoc();

$id=$row['userid'];
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

echo gettype($id);
Run Code Online (Sandbox Code Playgroud)

我得到一个字符串.这不应该是整数吗?

php mysql int types gettype

116
推荐指数
7
解决办法
10万
查看次数

PHP + PDO + MySQL:我如何从PHP中返回整数和数字列作为整数和数字?

我已经在Stack Overflow上重复了几次这个问题,但是没有一个能够充分探索这个问题(或者至少以一种对我有帮助的方式)

问题是数据库查询应该在PHP中为整数列返回整数数据类型.相反,查询将每列作为字符串类型返回.

我确保"PDO :: ATTR_STRINGIFY_FETCHES"为false,以确保结果不会被转换为字符串.

我见过的答案:

  • 它无法完成
    • 不,它正在Mac OS X上安装PHP/MySQL
  • 在代码中输入所有值
    • 不,我不会这样做
  • 不要担心,PHP是松散的类型
    • 我的数据输出为JSON并被许多其他服务使用,有些需要正确格式的数据

根据我的研究,我了解这是一个驱动程序实现问题.

许多消息来源声称MySQL本机驱动程序不支持返回数字类型.这似乎不正确,因为它适用于Mac OS X.除非他们的意思是" Linux上的MySQL本机驱动程序不支持该功能".

这意味着我在Mac OS X上安装的驱动程序/环境有一些特殊之处.我一直在尝试识别差异以便应用修复,但我受限于我对如何检查这些内容的了解.

差异:

  • OS X上的PHP是通过Home Brew编译和安装的
  • Ubuntu上的PHP是通过"apt-get install php5-dev"安装的
  • OS X上的PHP连接到也在OS X上运行的MySQL服务器
    • 服务器版本:5.1.71-log源分发
  • Ubuntu上的PHP连接到Rackspace云数据库
    • 服务器版本:5.1.66-0 + squeeze1(Debian)

Ubuntu环境

  • 版本:10.04.1
  • PHP 5.4.21-1 + debphp.org~lucid + 1(cli)(内置:2013年10月21日08:14:37)
  • php -i

    PDO_MYSQL

    用于MySQL的PDO驱动程序=>已启用客户端API版本=> 5.1.72

Mac OS X环境

  • 10.7.5
  • PHP 5.4.16(cli)(内置:2013年8月22日09:05:58)
  • php -i

    PDO_MYSQL

    用于MySQL的PDO驱动程序=>启用客户端API版本=> mysqlnd 5.0.10 - 20111026 - $ Id:e707c415db32080b3752b232487a435ee0372157 $

使用PDO标志

PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS …
Run Code Online (Sandbox Code Playgroud)

php mysql macos ubuntu pdo

76
推荐指数
2
解决办法
2万
查看次数

获取MySQL查询结果作为其本机数据类型?

我尝试使用mysql_fetch_row()和获取MySQL查询结果,mysql_result()并且数值作为字符串返回.

有没有办法获取数据作为存储在表中的数据类型?

应用程序将查询许多不同的查询,因此我将无法以1为单位将值转换为预期的数据类型.

php mysql types resultset

18
推荐指数
2
解决办法
8661
查看次数

防止MySQL PDO将数字作为字符串返回

我正在使用PHP的PDO来查询MySQL数据库.它将数字和整数作为字符串返回,并且正在弄乱我的JSON.

除了逐行输入值之外,还有更好的方法来修复它吗?

array(2) { 
  ["name"]=> string(11) "Preliminary" 
  ["sell_price"]=> string(6) "864.00"
} 
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

15
推荐指数
1
解决办法
2353
查看次数

PHP MySQL PDO:如何保留zerofill int列的前导零

在从旧mysql_*()函数迁移到新PDO类的过程中,我又遇到了一个问题:我有一个下表:

CREATE TABLE `test` (
  `Id` tinyint(4) unsigned zerofill NOT NULL,
  `UserName` varchar(4) NOT NULL,
  `TestDecimal` decimal(6,0) unsigned zerofill DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

注意zerofill'ed IdTestDecimal字段.

如果我运行以下代码,使用旧mysql_*()函数:

$SqlQuery = "SELECT * FROM test";
$Sql_Result = mysql_query($SqlQuery);
var_dump(mysql_fetch_array($Sql_Result));
Run Code Online (Sandbox Code Playgroud)

我得到以下输出,正确的zerofilled Id:

array (size=6)
  0 => string '0001' (length=4)
  'Id' => string '0001' (length=4)
  1 => string 'alex' (length=4)
  'UserName' => string 'alex' (length=4)
  2 => string '000002' (length=6) …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

15
推荐指数
1
解决办法
2243
查看次数

PDO是否始终默认使用模拟的预准备语句?

PDO具有PDO::ATTR_EMULATE_PREPARES控制是否应仅在DB不支持或始终模拟准备语句的选项.但是,它没有提到它是否总是默认模拟它们.

通常人们会认为仿真只在必要时才使用,但因为它是PHP,所以没有什么可以假设只是因为它是理智的......

php pdo prepared-statement

11
推荐指数
1
解决办法
3517
查看次数

如何使用PDO从MySQL获取正确的数据类型?

我的PDO fetch以字符串形式返回所有内容.

我有一个id(int)和username(varchar)的用户类.

当我尝试以下sql请求时

$db->prepare('SELECT * FROM users WHERE id=:id_user');
$db->bindParam(':id_user', $id_user);
$db->execute();
$user_data = $db->fetch(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

和var_dump($ user_data),id参数是一个字符串.我怎样才能使PDO尊重mysql中正确的数据类型?

php mysql pdo

9
推荐指数
1
解决办法
3193
查看次数

PDO在PHP5.4中将整数列作为String返回

首先,据我所知,有作为SO等各种类似的问题这个这个.但是,当我从表中获取值时,整数总是被提取为字符串.

我使用PHP5.4(5.4.16-1~dotdeb.1)和MYSQL5.5(5.5.31 + dfsg-0 + wheezy1).这里写的是PHP5.4.0中默认启用了MySQL Native Driver.但我仍然得到字符串值.

我按如下方式初始化PDO对象.

try {
        $dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8';

        $db = new PDO($dsn,DB_USER,DB_PASS);

        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    } catch (PDOException $e) {
        header('HTTP/1.1 500');
        exit;
    } catch (Exception $e) {
        header('HTTP/1.1 500');
        exit;
    }
Run Code Online (Sandbox Code Playgroud)

当我插入时,我尝试使用execute(array(...))格式并使用bindValue(...,PDO::PARAM_INT),但它们并没有什么区别.

例如,以下是我插入新行的方法.

public function insertList ($db,$account_id,$list_name) {
    $sql = $db->prepare('INSERT INTO lists VALUES (?,?,?,?,?)');

    try {
        // $sql->execute(array($list_name,0,0,0,$account_id));

        $sql->bindValue(1,$list_name,PDO::PARAM_STR);
        $sql->bindValue(2,0,PDO::PARAM_INT);
        $sql->bindValue(3,0,PDO::PARAM_INT);
        $sql->bindValue(4,0,PDO::PARAM_INT);
        $sql->bindValue(5,$account_id,PDO::PARAM_INT); …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

9
推荐指数
1
解决办法
3977
查看次数

Doctrine不会使用布尔值持久化实体,并且在Mysql中PDO :: ATTR_EMULATE_PREPARES = false

我们正在使用Symfony来创建一些Web服务.我们使用Doctrine-ORM来存储实体,使用Doctrine-DBAL来检索数据,因为它非常轻,可以重用ORM(实体管理器)连接.

使用Doctrine-DBAL时,整数值作为字符串返回给PHP,我们希望有整数值,特别是因为它们被退回到Javascript.下面讨论如何使用PDO从MySQL获取数值类型?我们安装了mysql本机驱动程序sudo apt-get install php5-mysqlnd并使用PDO :: ATTR_EMULATE_PREPARE = false设置我们的symfony(dbal)配置:

doctrine:
    dbal:
         .
         .

         options:
            20 : false # PDO::ATTR_EMULATE_PREPARES is 20
Run Code Online (Sandbox Code Playgroud)

使用这种配置,当mysql字段是整数时,我们得到整数.到现在为止还挺好.

但是有一个新问题:当通过Doctrine-ORM存储具有布尔值的实体时,实体不会被持久化.我们在日志中看到INSERT和COMMIT,但记录不在数据库中(如果我们使用的表没有在实体中定义的布尔字段,则存储记录).

此外,我们没有得到任何错误或异常,因此我们发现这非常危险.我们认为PDO库中存在一个错误,但我们必须更多地了解它.

问题:有没有人经历过这种行为?任何解决方法?Doctrine应该解释这个吗?

php mysql pdo symfony doctrine-orm

9
推荐指数
2
解决办法
1321
查看次数