给定此代码
$mapper->reset();
$mapper->set( 'foo', 'bar' ); // <--- Error here: `foo` does not exists in the table
$mapper->insert();
其中foo
是一个列,不存在于Map表中,我得到此错误
Internal Server Error
SQLSTATE[42S22]: Column not found:
1054 Unknown column 'bar' in 'field list'
[/var/www/example.com/html/lib/php/fatfreeframework/DB/SQL.php:230]
错误消息具有误导性,事实上不存在的列是foo
,而不是bar
:后者是试图设置给不存在的列的值。
为什么会发生这种情况?有办法解决吗?
Php 8.1.9中的内容
客户端API版本=〉mysqlnd 8.1.9
mysql8.0.30数据库
1条答案
按热度按时间9cbw7uwe1#
通过打开issue on github,我从@ikkez得到了答案:
这是当前的预期行为,因为设置不存在的字段等于定义即席字段。
参考:https://fatfreeframework.com/3.8/databases#VirtualFields
解决这个问题的方法是应用一个可填充字段的白名单,这些字段允许在使用
copyfrom
之类的工具时进行设置。即: