用于PHP多维数组值的数据库插入的SQL语法

时间:2018-08-29 13:09:46

标签: php mysql arrays

在这里尝试一些新的东西(对我来说)。

首先,我使用一些表单发布值构建多维数组。假设这里的数字等于2:

$multieventarr = Array();

    for($i=0; $i<$numdays; $i++){
            $values = Array();

            $multieventdate = clean($_POST['eventDate_'.$i.'']);
            $multistarttime = clean($_POST['startTime_'.$i.'']);
            $multiendtime = clean($_POST['endTime_'.$i.'']);
            $multistarttime24 = date("H:i", strtotime($multistarttime));
            $multiendtime24 = date("H:i", strtotime($multiendtime));

                array_push($values, $multieventdate);
                array_push($values, $multistarttime24);
                array_push($values, $multiendtime24);
                array_push($multieventarr, $values);

        }

由此,我得到以下内容,在尝试插入以确保我具有值之前,我将其转储:

array(2) { 

[0]=> array(3) { 
    [0]=> string(10) "2018/08/30" 
    [1]=> string(5) "00:00" 
    [2]=> string(5) "01:00" 
} 

[1]=> array(3) { 
    [0]=> string(10) "2018/08/31" 
    [1]=> string(5) "01:00" 
    [2]=> string(5) "02:00" 
} 

} 

然后我尝试按如下所示插入值:

for($i=0; $i<$numdays; $i++){           
    $qry = "INSERT INTO cae_event_dates(eventid, eventdate, starttime, endtime)VALUES('$eventid', '{$multieventarr[$i][0]}', '{$multieventarr[$i][1]}', '{$multieventarr[$i][2]}')";
    $conn->exec($qry);
}

感谢Nigel的最初建议,是在insert语句的VALUES部分中的数组变量周围添加花括号。如屏幕截图所示,这对我有用。

enter image description here

我没有进行任何其他更改,因此不确定在不执行此处提到的一些格式设置建议的情况下数据库如何或为什么接受我提供的内容,但是仍然有效。

干杯!

4 个答案:

答案 0 :(得分:0)

由于您的数据库表需要使用日期类型值(Y-m-d)和时间类型值(H:i:s),因此您需要先准备发布的值,然后再去查询。

*请注意,所有这些临时变量和push ing都可以删除,以简化代码段(除非您喜欢这种方式的可读性)。

未经测试的代码:

for($i=0; $i<$numdays; $i++){
    $rows[] = [
        str_replace('/', '-', clean($_POST['eventDate_'.$i])),
        date("H:i:s", strtotime(clean($_POST['startTime_'.$i]))),
        date("H:i:s", strtotime(clean($_POST['endTime_'.$i])))
    ];
}

然后,您可以迭代$row来生成查询。

如果您希望遵循Strawberry的良好建议,可以将完整的数据收集作为单个字符串构建为VALUES子句。

for($i=0; $i<$numdays; $i++){
    $rows[] = "('" . $event_id . "','" .
                     str_replace('/', '-', clean($_POST['eventDate_'.$i])) . "','" .
                     date("H:i:s", strtotime(clean($_POST['startTime_'.$i]))) . "','" .
                     date("H:i:s", strtotime(clean($_POST['endTime_'.$i]))) . "')";
}                 
$values = implode(',', $rows);

然后执行单个查询:

$conn->exec("INSERT INTO cae_event_dates (eventid, eventdate, starttime, endtime) VALUES $values");

答案 1 :(得分:0)

编辑您要执行的操作:

for($i=0; $i<$numdays; $i++){
    $values = Array();

    $multieventdate = clean($_POST['eventDate_'.$i.'']);
    $convertedDate = date('Y-m-d', strtotime($multieventdate)); //The date has to be converted to the format that your database is expecting.
    $multistarttime = clean($_POST['startTime_'.$i.'']);
    $multiendtime = clean($_POST['endTime_'.$i.'']);
    $multistarttime24 = date("H:i:s", strtotime($multistarttime)); //The time has to be converted to the format that your database is expecting.
    $multiendtime24 = date("H:i:s", strtotime($multiendtime));

    array_push($values, $convertedDate);
    array_push($values, $multistarttime24);
    array_push($values, $multiendtime24);
    array_push($multieventarr, $values);
}

也编辑您的查询:

$qry = "INSERT INTO cae_event_dates(eventid, eventdate, starttime, endtime)VALUES('$eventid', '{$multieventarr[$i][0]}', '{$multieventarr[$i][1]}', '{$multieventarr[$i][2]}')";  //Array inclusion in queries could be a little tricky, so wrap it using curly braces.

答案 2 :(得分:-1)

如您所见,您的var_dump告诉您日期和时间是一个字符串。您必须将日期和时间格式化为日期数据类型,以便数据库知道它是什么。

在将日期插入到数据库之前,请查看PHP文档中的dateformat,以格式化日期,例如:

$insertableDate = date("Y-m-d", $yourDate);
$insertableTime = date("h-i-s", $yourTime);

答案 3 :(得分:-1)

这实际上取决于您的SQL数据库中此列的类型。

  • DATE-Y-m-d
  • DATETIME-Y-m-d H:i:s
  • TIMESTAMP-Y-m-d H:i:s
  • YEAR-Y

然后,您可以循环日期,然后将其插入数据库并将其转换为正确的格式:

$timestamp = strtotime($old_date);
$mydate = date('Y-m-d H:i:s', $timestamp);