【问题标题】:Casting Issue in PHP PDO::FETCH_CLASSPHP PDO::FETCH_CLASS 中的转换问题
【发布时间】:2017-11-19 21:27:26
【问题描述】:

我尝试使用PDO::FETCH_CLASS 从状态表中获取数据,但它返回int 字段为string

MySQL 表架构:

CREATE TABLE IF NOT EXISTS `INState` (
  `StateId` bigint(20) NOT NULL,
  `Name` varchar(255) NOT NULL
)

我的 PHP 代码:

class StateModel
{
    public $StateId;
    public $Name;
}

$stateArr = $db->query('SELECT StateId, Name FROM INState')->fetchAll(PDO::FETCH_CLASS, 'StateModel');

var_dump($stateArr);

以上代码的输出是

array(2) { 
    [0]=> object(StateModel)#4 (2) 
        { ["StateId"]=> string(1) "1" ["Name"]=> string(14) "Andhra Pradesh" } 
    [1]=> object(StateModel)#5 (2) 
        { ["StateId"]=> string(1) "2" ["Name"]=> string(10) "Tamil Nadu" }
)

在表架构中,列StateId 标记为bigint,但它返回的代码端为string。如何使用PDO::FETCH_CLASSStateId 属性设为int 而不是string?请帮助我。

【问题讨论】:

  • related answer。和你有同样的问题,对我来说很好(php7)

标签: php mysql pdo casting php-7


【解决方案1】:

当然@Mayank 是对的,但我们可以在构造函数中显式设置属性数据类型。

class StateModel
{
    public $StateId;
    public $Name;

    public function __construct()
    {
        settype($this->StateId, 'integer');
    }
}

最后你的代码的输出是

array(2) { 
    [0]=> object(StateModel)#1 (2) 
        { ["StateId"]=>  int(1) ["Name"]=> string(14) "Andhra Pradesh" } 
    [1]=> object(StateModel)#2 (2) 
        { ["StateId"]=>  int(2) ["Name"]=> string(10) "Tamil Nadu" }
)

【讨论】:

    【解决方案2】:

    当您使用PHPMySQL 数据库中选择数据时,数据类型将始终转换为string。您可以检查每个PDO Fetch method 返回类型是否为mixed。您可以使用以下代码将其转换回整数:

    $id = (int) $row['column'];
    

    或者使用函数intval():

    $id = intval($row['column']);
    

    【讨论】:

    • 是否有任何可选设置来执行此转换?否则建议的解决方案需要再次迭代集合。
    • 如果您只想显示它,则无需转换它。如果你想做一些计算而不是迭代它。
    • 有时我会获取一些数据并进行一些操作。此外,我将其发送到 angular UI 应用程序,这又是一个问题。所以我默认询问它是否返回 int 意味着没有问题,否则我将手动执行。感谢您的友好信息。
    • 在 Angular 应用程序中,如果 int 以字符串形式出现,我们需要进行排序,这意味着排序不会给出正确的结果。
    • 在这种情况下你必须迭代它。如果我没记错的话,您还必须迭代结果集以显示每条记录,然后键入 cast
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    相关资源
    最近更新 更多