-> 获取 returns 所有字段作为字符串
->fetch returns all fields as string
即使在 src/Database/StatementInterface.php
中,函数 fetch
和 fetchAll
也有这些注释:
$statement = $connection->prepare('SELECT id, title from articles');
$statement->execute();
print_r($statement->fetchAll('assoc')); // will show [0 => ['id' => 1, 'title' => 'a title']]
函数 return ALL 字段为 string
,即使字段定义为数字:
array(4) {
["lat"]=>
string(11) "38.49580000"
["lng"]=>
string(11) "-6.95301000"
["taken_at"]=>
string(19) "2021-03-30 16:24:30"
["id"]=>
string(1) "1
字段lat
和lng
定义为DECIMAL(10,8)|(11,8)
,id
定义为INTEGER
。 CakePHP 4.3.1 [以及以前的版本] return 字段作为 string
破坏了代码。
我是不是做错了什么或者这是一个错误?
您正在使用 CakePHP 提供的最低级别的数据库操作,这几乎是直接使用 PDO 进行操作,此处不适用 CakePHP 的强制转换,您将收到什么完全取决于 DBMS 和 PDO您正在使用的驱动程序。
大多数驱动程序 return 将所有内容都作为字符串,其他驱动程序会强制转换一些值,例如使用 Postgres 您可以获得整数,而使用 MySQL 您将获得所有内容作为字符串。
即使在 src/Database/StatementInterface.php
中,函数 fetch
和 fetchAll
也有这些注释:
$statement = $connection->prepare('SELECT id, title from articles');
$statement->execute();
print_r($statement->fetchAll('assoc')); // will show [0 => ['id' => 1, 'title' => 'a title']]
函数 return ALL 字段为 string
,即使字段定义为数字:
array(4) {
["lat"]=>
string(11) "38.49580000"
["lng"]=>
string(11) "-6.95301000"
["taken_at"]=>
string(19) "2021-03-30 16:24:30"
["id"]=>
string(1) "1
字段lat
和lng
定义为DECIMAL(10,8)|(11,8)
,id
定义为INTEGER
。 CakePHP 4.3.1 [以及以前的版本] return 字段作为 string
破坏了代码。
我是不是做错了什么或者这是一个错误?
您正在使用 CakePHP 提供的最低级别的数据库操作,这几乎是直接使用 PDO 进行操作,此处不适用 CakePHP 的强制转换,您将收到什么完全取决于 DBMS 和 PDO您正在使用的驱动程序。
大多数驱动程序 return 将所有内容都作为字符串,其他驱动程序会强制转换一些值,例如使用 Postgres 您可以获得整数,而使用 MySQL 您将获得所有内容作为字符串。