php - 在 CentOS 7.1 和 Laravel 5.1 上,Int 在 PHP 中被处理为字符串

标签 php mysql laravel unix centos

我在Windows系统上进行开发,并经常使用!==比较来确保值和类型都符合预期。我只是遇到了问题(比较失败)并且刚刚发现 int 类型的值(在 mysql 中)被作为字符串处理。

在 Windows 上,它看起来像这样:

Order {#488 ▼
  #table: "orders"
  #guarded: array:1 [▶]
  #hidden: []
  #fillable: array:9 [▶]
  #dates: array:1 [▶]
  #connection: null
  #primaryKey: "id"
  #perPage: 15
  +incrementing: true
  +timestamps: true
  #attributes: array:14 [▼
    "id" => 6
    "currency_id" => 1
    "user_id" => 1
    "coupon_id" => 1
    "status" => 2
    "created_at" => "2017-06-26 00:37:44"
    "updated_at" => "2017-06-26 00:37:50"
    "deleted_at" => null
  ]

在 CentOS 上是这样的:

Order {#488 ▼
  #table: "orders"
  #guarded: array:1 [▶]
  #hidden: []
  #fillable: array:9 [▶]
  #dates: array:1 [▶]
  #connection: null
  #primaryKey: "id"
  #perPage: 15
  +incrementing: true
  +timestamps: true
  #attributes: array:14 [▼
    "id" => "6"
    "currency_id" => "1"
    "user_id" => "1"
    "coupon_id" => "1"
    "status" => "2"
    "created_at" => "2017-06-26 00:37:44"
    "updated_at" => "2017-06-26 00:37:50"
    "deleted_at" => null
  ]

我真的不知道是什么原因造成的。请让我知道需要哪些额外信息才能找到答案。由于我根本不知道,所以我不知道到底什么可能是相关的。

其他信息:

我使用的是 Laravel 5.1,并使用 Laravel 的 dd() 方法打印此信息。数据是 Eloquent 模型的实例。

最佳答案

问题可能只是与数据库交互的底层扩展中的一些细微差异,或者是数据库与代码之间的抽象层中的一些实现差异(版本差异?)。信息如此有限,很难判断。

但是,一般来说,在 PHP 中,您应该假设数据库值作为字符串传递给您,即使它们实际上是数据库中的整数/ float / bool 值。假设您需要自己进行类型检查和(如果需要)类型转换。

我还警告您不要在 PHP 中进行过度严格的检查。我明白你为什么要这样做,在大多数其他语言中我都会和你在一起,但 PHP 的定义特征之一是它对 native 类型漠不关心,并且能够自动在它们之间切换,因此在该语言中您不应该尝试过多地强制类型严格性。

关于php - 在 CentOS 7.1 和 Laravel 5.1 上,Int 在 PHP 中被处理为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44751822/

相关文章:

php - Codeigniter 2 $this->db->join 与 $this->db->update 一起使用

php - octobercms 任务调度不工作

php - 是否可以使用 php/html 编写的应用程序页面将文件上传到 GCP 上的计算引擎?

laravel - composer dump-autoload 的任务

php - 如何从闭包中终止 Eloquent 分块

php - 调用非对象上的成员函数bindParam()

mysql - 更新记录而不将 id 递增 1

mysql查询从表中获取季度月份

sql - 如何交换表中 2 条记录的列值?

php - 语法错误或访问冲突 : 1064 You have an error in your SQL syntax in alter table