继我之前发布的问题之后,我设法工作得很好,我现在试图检查和存储 csv 文件的日期,然后执行脚本如果 csv 文件较新。我计划在正常工作时运行 cron 作业,以便定期检查是否有更新的 csv 文件。当我手动将修改后的 csv 文件添加到目录然后手动运行脚本时,我似乎无法弄清楚为什么日期和 csv 文件没有更新到数据库中。
非常感谢任何帮助,S。
当前代码:
$stat = stat('../data/filename.csv');
$datetime = date ("F d Y H:i:s.", $stat['mtime']);
$datetime = mysql_real_escape_string($datetime);
$datetime = strtotime($datetime);
$datetime = date('Y-m-d H:i:s',$datetime);
echo "<br />Last modified: " . $datetime;
$query=mysql_query("select * from iscsvtime");
$dateResult=mysql_fetch_array($query);
$stored = $dateResult['added'];
if (($stored <= $datetime) && ($handle = fopen("../data/filename.csv", "r")) !== FALSE) {
$i=0;
echo "<br />Stored date: " . $stored;
mysql_query("INSERT INTO iscsvtime(added) VALUES ('$datetime')");
mysql_query('TRUNCATE TABLE isstock;');
while (($data = fgetcsv($handle, 0, ",")) !== FALSE)
{
if($i>0){
$q="insert into isstock set feedid='".$data[0]."', vehicleid='".$data[1]."', registration='".$data[2]."', colour='".$data[3]."', fueltype='".$data[4]."', year='".$data[5]."', mileage='".$data[6]."', bodytype='".$data[7]."', doors='".$data[8]."', make='".$data[9]."', model='".$data[10]."', variant='".$data[11]."', enginesize='".$data[12]."', price='".$data[13]."', previousprice='".$data[14]."', transmission='".$data[15]."', picturerefs='".$data[16]."', servicehistory='".$data[17]."', previousowners='".$data[18]."', description='".$data[19]."', fourwheeldrive='".$data[20]."', options='".$data[21]."', comments='".$data[22]."', new='".$data[23]."', used='".$data[24]."', site='".$data[25]."', origin='".$data[26]."', v5='".$data[27]."', condit='".$data[28]."', exdemo='".$data[29]."', franchiseapproved='".$data[30]."', tradeprice='".$data[31]."', tradepriceextra='".$data[32]."', servicehistorytext='".$data[33]."', capid='".$data[34]."'";
mysql_query($q);
}
?>
<tr>
<?php
foreach($data as $rec){
echo '<td>'.$rec.'</td>';
}
?>
</tr>
<?php
$i++;
}
}
fclose($handle);
编辑:事实证明我设法自己解决了这个问题; 只需要稍微更改if
语句并将INSERT INTO iscsvtime
更改为UPDATE
。更新了下面的代码:
if (($datetime > $stored) && ($handle = fopen("../data/filename.csv", "r")) !== FALSE) {
$i=0;
mysql_query("UPDATE iscsvtime SET added = '$datetime' WHERE id = '0'");
我倾向于说单引号和双引号的混合对您的事业没有帮助。这种不一致可能会导致任意数量的可能错误,而这些错误不会妨碍可读性。
诸如
echo "<br />Stored date: " . $stored;
可以替换为
echo "<br />Stored date: {$stored}";
或使用与脚本后面相同的表示法
echo '<td>'.$rec.'</td>';
我相信这可能会使您的SQL语句绊倒
mysql_query("INSERT INTO iscsvtime(added) VALUES ('$datetime')");
尝试将其更改为
mysql_query("INSERT INTO iscsvtime(added) VALUES ('{$datetime}')");
除此之外,您还可以通过使用 mysql 错误函数 php.net/mysql_error 添加一些错误日志记录,如下所示:
if(!mysql_query("INSERT INTO iscsvtime(added) VALUES ('{$datetime}')"))
{
echo mysql_errno . ': ' . mysql_error();
}
其他要检查的事情包括,需要它的函数中引用的文件在磁盘上的正确位置,文件是否为空,最后,insert语句是否与表的布局匹配,即如果表有多个列,是否将未提供的列设置为允许NULL 值,否则,这些应在插入语句中定义。
希望这有帮助