我尝试使用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
。如何使用StateId
将int
设置为string
而不是PDO::FETCH_CLASS
?请帮助我。
答案 0 :(得分:0)
使用MySQL
从PHP
数据库中选择数据时,数据类型将始终转换为string
。您可以检查每个PDO Fetch method
返回类型是否为mixed
。您可以使用以下代码将其转换回整数:
$id = (int) $row['column'];
或者使用函数intval()
:
$id = intval($row['column']);
答案 1 :(得分:0)
偏离@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" }
)