为什么PHP将MySQL INT列视为字符串?

时间:2016-01-12 17:46:38

标签: php laravel eloquent

我正在使用Laravel查询构建器来搜索类别。 这是:

$array[] = $categories->where('pk_i_id', $category_id)->first();

我必须手动将类别ID转换为字符串,即使在数据库中它是Integer类型。为什么我要这样做?

实际上 - 我必须在安装了Lamp堆栈的Linux机器上执行此操作。在具有Xampp的Windows机器上,它将列视为应该是整数。

1 个答案:

答案 0 :(得分:0)

问题听起来更像是$categories已经是Collection,而不是BuilderCollectionBuilder都有where()方法,但它们的逻辑不一样。

where()上的Builder方法会将参数化的where子句添加到针对数据库运行的查询中。在这种情况下,变量的类型无关紧要。

然而,where()上的Collection方法将遍历集合并返回第一个参数中的字段与传入的值完全相等(===)的结果第二个参数。要更改此设置,您可以将false作为第三个参数传递,它将使用松散比较(==)而不是严格。此外,您可以使用whereLoose(),这是where()的快捷方式,第三个参数为false

$array[] = $categories->where('pk_i_id', $category_id, false)->first();
// or
$array[] = $categories->whereLoose('pk_i_id', $category_id)->first();

如果不正确的字段类型导致了您所描述的更多问题,那么您可能希望解决潜在问题。正如链接帖子中所指出的那样,在LAMP堆栈上,您需要用mysqld驱动程序替换mysqlnd驱动程序。