每次运行php脚本时都会出现致命错误。尽管如此,所有的数据仍然上传到数据库。什么时候 $values[0]
是回声,没有 NULL
值作为错误状态,一切正常。我很困惑。
错误
[02-Oct-2018 19:59:54 America/Vancouver] PHP Warning: Invalid argument supplied for foreach() in /home1/antonfa1/public_html/trading-history/process.php on line 22
[02-Oct-2018 19:59:54 America/Vancouver] PHP Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'trade_date' cannot be null in /home1/antonfa1/public_html/trading-history/process.php:48
Stack trace:
# 0 /home1/antonfa1/public_html/trading-history/process.php(48): PDOStatement->execute(Array)
# 1 {main}
thrown in /home1/antonfa1/public_html/trading-history/process.php on line 48
奇怪的是,我昨天似乎没有收到这个警告和错误,所以我把从那以后所做的所有修改都注解掉了,但问题仍然存在。
脚本
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],
]);
}
是 fgetcsv($file) as $key => $value
真的是一个无效的论点吗?这是导致这个“错误”错误的潜在原因吗?我昨天没有收到这个警告:/
回声
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
所有的数据点都在那里,没有 NULL
...
2条答案
按热度按时间csbfibhn1#
您的pdo参数需要这样传递:
你错过了
:
部分密钥传递给PDOStatement::execute
cnjp1d6j2#
你的问题是
fgetcsv()
退货false
当它到达文件末尾时。。。如果提供的句柄无效,fgetcsv()将返回null;如果出现其他错误(包括文件结尾),则返回false。
你可以用
fgetcsv()
和你用的方法一样feof()
只在有记录要查找时循环。例如
如果使用位置占位符,则不需要为准备好的语句构造关联数组。