提问人:Paolo 提问时间:12/9/2022 最后编辑:Paolo 更新时间:12/9/2022 访问量:44
F3 Sql 映射器:为映射表中不存在的字段设置值时出现误导性错误消息
F3 Sql Mapper: Misleading error message when setting value for non existent field in the mapped table
问:
给定此代码
$mapper->reset();
$mapper->set( 'foo', 'bar' ); // <--- Error here: `foo` does not exists in the table
$mapper->insert();
映射表中没有 esist 的列在哪里,我收到此错误foo
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
pdo_mysql 客户端 API 版本 => mysqlnd 8.1.9
MySQL的8.0.30
答:
1赞
Paolo
12/9/2022
#1
通过在 github 上打开一个问题,我从 @ikkez 那里得到了答案:
这是当前的预期行为,因为设置不存在的字段 = 定义临时字段。
$mapper->set('count_x',
'SELECT COUNT(id) from x where x.id = y.foreign_key group by x.id');
编号: https://fatfreeframework.com/3.8/databases#VirtualFields
解决此问题的方法是应用允许设置的可填写字段白名单,以防您使用类似 .copyfrom
即:
$mapper->copyfrom('POST', function($val) {
return array_intersect_key($val, array_flip(['first_name', 'last_name', 'age']));
});
上一个:保护 POST 请求免受操纵
评论
it looks to me it is from the database server
set()
And Have you already identified the revision of F3 SQL Mapper