【发布时间】:2014-12-08 07:54:35
【问题描述】:
我正在尝试使用上传页面通过以下代码插入我的数据库:
if($file!=="")
{
echo "<br/>".$file;
$handle = fopen($file, "r");
$row = 0;
$delete_records = mysql_query("DELETE FROM affiliationagreements");
$delete_records = mysql_query("DELETE FROM college");
$delete_records = mysql_query("DELETE FROM program");
$delete_records = mysql_query("DELETE FROM facility");
$delete_records = mysql_query("DELETE FROM submitor");
$delete_records = mysql_query("DELETE FROM location");
//will loop each record in the CSV file
while(($fileop = fgetcsv($handle,1000,",")) !== false )
{
//columns names of the CSV file are not needed
if($row==0)
{
$row++;
}
else
{
//accept apostrophes in the strings
$fileop = array_map("mysql_real_escape_string",$fileop);
$sql = mysql_query("INSERT INTO affiliationagreements(id, AANumber, Facility, Submitor, Program, Location, College, SubmissionDate, Action, EffectiveDate, Status, ExpirationDate)
VALUES('',
'$fileop[0]',
'$fileop[1]',
'$fileop[2]',
'$fileop[3]',
'$fileop[4]',
'$fileop[5]',
'$fileop[11]',
'$fileop[23]',
'$fileop[24]',
'$fileop[25]',
'$fileop[26]')
")or die(mysql_error());
仅提供一个示例,当我上传 CSV 文件以添加值时,我在控制台中将它们打印出来,并查看这些值是否被正确读取并且它们是正确的。但是,一旦我的 php 脚本结束并返回主页,我的日期都是空的。它们都不是 csv 文件中反映的值。这是我的数据库的架构:
CREATE TABLE `affiliationagreements` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`AANumber` varchar(20) DEFAULT NULL,
`Facility` varchar(150) DEFAULT NULL,
`Submitor` varchar(50) DEFAULT NULL,
`Program` varchar(60) DEFAULT NULL,
`Location` varchar(50) DEFAULT NULL,
`College` varchar(50) DEFAULT NULL,
`SubmissionDate` date DEFAULT NULL,
`Action` varchar(50) DEFAULT NULL,
`EffectiveDate` date DEFAULT NULL,
`Status` varchar(50) DEFAULT NULL,
`ExpirationDate` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
如果我将 SubmissionDate、EffectiveDate 和 ExpirationDate 更改为 varchar,它们会正确插入,但我无法使用 varchar,因为我正在比较日期值。和建议?
***更新。在 CSV 文件中,格式为 MM/DD/YYYY。我不认为这会是个问题。改变这个会更好吗?我正在删除记录,因为我的老板希望在重新上传文件之前清除数据库,因为上传的文件是先前上传的文件的更新。 ****
【问题讨论】:
-
旁注:您确实意识到您一直在用
$delete_records = mysql_query覆盖您的查询,而且您没有WHERE子句,那么如何知道要删除什么?跨度> -
@Fred-ii- 这是故意的,因为它是一个测试脚本。
-
另外,出于性能考虑,不推荐使用 NULL。 stackoverflow.com/questions/1017239/…
-
您是否尝试过回应您的查询?
-
您将不得不发布一些有效负载数据。当无法猜测您尝试插入的实际值时。