Php 致命错误:未捕获PDOException:列不能为null(但它不是null…)
每次运行PHP脚本时,我都会遇到一个致命错误。尽管如此,所有数据仍然上传到数据库。回显$values[0]时,错误状态下没有空值,一切正常。我很困惑 错误 奇怪的是,我昨天似乎没有收到这个警告和错误,所以我把从那以后所做的所有修改都注释掉了,但问题仍然存在 剧本Php 致命错误:未捕获PDOException:列不能为null(但它不是null…),php,mysql,pdo,prepared-statement,fgetcsv,Php,Mysql,Pdo,Prepared Statement,Fgetcsv,每次运行PHP脚本时,我都会遇到一个致命错误。尽管如此,所有数据仍然上传到数据库。回显$values[0]时,错误状态下没有空值,一切正常。我很困惑 错误 奇怪的是,我昨天似乎没有收到这个警告和错误,所以我把从那以后所做的所有修改都注释掉了,但问题仍然存在 剧本 所有数据点都在那里,没有一个是空的…您的PDO参数需要像这样传递: $statement->execute([ ':foo' => 1, ':bar' => '2001-01-01', ':ba
所有数据点都在那里,没有一个是空的…您的PDO参数需要像这样传递:
$statement->execute([
':foo' => 1,
':bar' => '2001-01-01',
':baz' => 42
]);
您缺少传递给PDOStatement::execute的键的:部分。您的问题是fgetcsv到达文件末尾时返回false
如果提供了无效句柄,fgetcsv将返回NULL;如果出现其他错误(包括文件结尾),fgetcsv将返回FALSE
使用fgetcsv的方式与使用feof仅在存在记录时循环相同
比如说
$stri=执行$values;
}否则{
回显“跳过无效记录”;
}
}
fclose$文件;
如果使用位置占位符,则不需要为准备好的语句构造关联数组。fgetcsv$file as$key=>$value真的是无效参数吗@Phil为什么foreach循环在到达文件tho的末尾后执行?因为您告诉它要执行。请看一下示例~。您可以也应该像使用feofFYI一样使用fgetcsv,MySQL有一个导入CSV数据的特定工具,它可能更容易使用。请参阅,冒号不是必需的。PHP将为您插入它,如果它丢失请参阅源代码~不知道谁投票否决了你。在我完成php文档中的示例u linkedk之后,我会立即尝试,以便在$row=fgetcsv$file!==FALSE{$num=count$row;for$c=0;$c<$num;$c++{echo$row[$c]。\n;}}@Anthony我已经更新了我的答案,添加了更多的检查,例如$values数组中的10条记录。真的有必要这样格式化$stri变量的值吗?很漂亮。非常感谢你的帮助!!!非常感谢。令人失望的是,有人会投票否决实际答案,但有点典型的笑
include 'includes/connect.php';
$stri = 'INSERT INTO trades (trade_date, trade_time, trade_datetime, trade_transaction, trade_symbol, trade_status, trade_quantity, trade_filled, trade_price, trade_value) VALUES (:date, :time, :datetime, :transaction, :symbol, :status, :quantity, :filled, :price, :value)';
$file = fopen($_SESSION['file'], 'r');
while (!feof($file)) {
$values = [];
foreach (fgetcsv($file) as $key => $value) {
array_push($values, $value);
}
echo $values[0] . '<br>';
$stat = $conn->prepare($stri);
$stat->execute([
'date' => $values[0],
'time' => $values[1],
'datetime' => $values[2],
'transaction' => $values[3],
'symbol' => $values[4],
'status' => $values[5],
'quantity' => $values[6],
'filled' => $values[7],
'price' => $values[8],
'value' => $values[9],
]);
}
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
2018-10-02
$statement->execute([
':foo' => 1,
':bar' => '2001-01-01',
':baz' => 42
]);