【问题标题】:SQL Insert Date Always comes out NULLSQL 插入日期总是出现 NULL
【发布时间】: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/…
  • 您是否尝试过回应您的查询?
  • 您将不得不发布一些有效负载数据。当无法猜测您尝试插入的实际值时。

标签: php mysql sql csv


【解决方案1】:

mysql date 字段只接受这种格式的日期:0000-00-00

您可以在插入查询中使用DATE_FORMAT(),但我无法给出示例,因为您没有发布实际日期的格式。

http://www.w3schools.com/sql/func_date_format.asp

【讨论】:

    【解决方案2】:

    检查你的日期格式,因为 MySql 它需要是 YYYY-MM-DD 格式

    INSERT INTO table SET date = '2014-05-13'
    

    如果您有不同的格式,日期将改为存储“0000-00-00”。因此,在运行查询之前通过回显您的查询字符串来仔细检查您的插入。

    【讨论】:

    • 好收获。如果这是问题,我不会感到惊讶。
    • 是的,就是这样。愚蠢的数据库简直是荒谬的。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    相关资源
    最近更新 更多