gpt4 book ai didi

无论定义什么数据类型,PHP sqlite 都会返回所有字符串

转载 作者:行者123 更新时间:2023-12-03 17:46:54 24 4
gpt4 key购买 nike

我正在使用内存数据库中的 sqlite 运行单元测试,但遇到了一个问题。

当我使用 mysql 数据库执行测试时,以下比较正常工作

if ($item->user_id === Auth::id())

如果数字匹配,它将评估为真,如果不匹配,它将评估为假。当我在内存数据库中使用 sqlite 时,条件语句将 总是 返回 false因为 user_id属性作为 string 返回而不是正确的 int数据类型。

我读过一些帖子和评论,说这是 PHP 中 sqlite 的可配置内容,而其他人则说它无法更改。我想在我的测试中使用内存中的 sqlite 数据库,但如果我不能改变这种行为,我必须改变我的条件来使用 ==而不是更严格的 === .如何更改 sqlite 查询的行为?

更新

我也试过将它添加到 sqlite 配置中
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'options' => [
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::FETCH_NUM => true,
],
],

这也无济于事。

最佳答案

The problem is actually with PDO ,而不是具体的 SQLite 或 Laravel,实际上所有数据库都会发生。你得到的事实int来自 MySQL 的 s 表明您正在使用 the mysqlnd driver ,它为 MySQL 解决了这个问题。

我采用的解决方案是 explicitly cast fields在我的模型中:

protected $casts = [
'user_id' => 'integer'
];

关于无论定义什么数据类型,PHP sqlite 都会返回所有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46805727/

24 4 0
文章推荐: sqlite - SQLite:如何使用alter将主键添加到表?
文章推荐: sqlite - 如何获取虚拟表的名称?
文章推荐: sql - SQLite:具有四个表的完全外部联接
文章推荐: sqlite - 尝试使用 ExecuteScalar 从表中检索数据时出错?