gpt4 book ai didi

php - Laravel-Eloquent-Adding record to MySQL : Building dynamic eloquent insert command, 并在第一列返回 "Column Not Found"

转载 作者:行者123 更新时间:2023-11-29 03:15:26 29 4
gpt4 key购买 nike

我重写了这个帮助请求,并简化了我试图尽量减少移动部件数量的内容。

我是一名经验丰富的 OOP 程序员,但这是我使用 LAMP、Laravel 或 Eloquent 的第一个项目。

我正在 Laravel-Spark 中构建数据导入工具。用户将提供一个 .csv 文件。我的程序将根据标题(第一)行数据确定提供了哪些数据。它将从那里向 MySQL 表中插入一个新行并更新提供的字段。

function ImportPositions($incomingfile)
{
if (($handle = fopen ( public_path () . '/ImportFiles/samplepositions.csv', 'r' )) !== FALSE) {

$header = fgetcsv($handle, 2000, ',');
$headercount = count($header);

while ( ($data = fgetcsv ( $handle, 2000, ',' )) !== FALSE ) {

$position = new Position;
$i = 0;
while ($i<$headercount):

$fieldname=$header[$i];
$fielddata=$data[$i];
// Example: $position->posno="12345";
$position->$fieldname=$fielddata;

$i++;
endwhile;

$position->save();
}
fclose ( $handle );
}
}

代码返回此错误。该字段肯定存在。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'active' in 'field list' (SQL: insert into `positions` (`active`, `updated_at`, `created_at`) values (A, 2019-11-12 03:32:50, 2019-11-12 03:32:50))

在尝试调试时,这工作正常:

$fieldname2='active';
$fielddata2='A';
$position->$fieldname2=$fielddata2;
$position->save();

接下来,尝试证明我的派生值是有效的:

$fieldname=$header[$i];
$fielddata=$data[$i];

$fieldname2='active';
$fielddata2='A';

dump("|".$fieldname."|".$fieldname2."|");
dd("|".$fielddata."|".$fielddata2."|");

返回以下内容,因此两组变量看起来是相同的:

"|active|active|"
"|A|A|"

但是:当我用派生变量替换类型化变量时,它失败并给出上面列出的错误。

$fieldname=$header[$i];
$fielddata=$data[$i];
$position->$fieldname=$fielddata;
$position->save();

感谢您的帮助!

最佳答案

回答:我的输入文件有 BOM 标记,导致导入出现问题。它搞乱了 SQL 语句,即使它在显示脚本的调试消息中不可见。

修复:简单:在 Notepad++ 中打开导入文件,然后选中“ENCODING”。我的文件显示“UTF-8-BOM”。我将其更改为“UTF-8”并解决了问题。

感谢所有提供意见的人!

关于php - Laravel-Eloquent-Adding record to MySQL : Building dynamic eloquent insert command, 并在第一列返回 "Column Not Found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58785087/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com