-> 获取 returns 所有字段作为字符串

->fetch returns all fields as string

即使在 src/Database/StatementInterface.php 中,函数 fetchfetchAll 也有这些注释:

  $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

字段latlng定义为DECIMAL(10,8)|(11,8)id定义为INTEGER。 CakePHP 4.3.1 [以及以前的版本] return 字段作为 string 破坏了代码。

我是不是做错了什么或者这是一个错误?

您正在使用 CakePHP 提供的最低级别的数据库操作,这几乎是直接使用 PDO 进行操作,此处不适用 CakePHP 的强制转换,您将收到什么完全取决于 DBMS 和 PDO您正在使用的驱动程序。

大多数驱动程序 return 将所有内容都作为字符串,其他驱动程序会强制转换一些值,例如使用 Postgres 您可以获得整数,而使用 MySQL 您将获得所有内容作为字符串。