Javascript 有没有办法在mysql数据库表中插入一系列日期

Javascript 有没有办法在mysql数据库表中插入一系列日期,javascript,php,ajax,Javascript,Php,Ajax,我正在使用一个表格供用户通过我的网站预订假期住宿,预订详细信息包括公寓、入住、退房日期以及使用日期差异功能计算的总天数。我还使用for循环在签入和签出日期之间进行迭代,然后生成一系列日期。问题是,当我对mysql执行insert查询时,只有范围中的结束日期被插入到数据库表中。我的目标是将整个范围插入mysql,以便禁用日期选择器上已预订的日期。谁能告诉我我做错了什么,请看下面我的代码 我已经尝试使用date period对象,并在phpmyadmin中探索了日期范围字段的所有数据类型 我还尝试为

我正在使用一个表格供用户通过我的网站预订假期住宿,预订详细信息包括公寓、入住、退房日期以及使用日期差异功能计算的总天数。我还使用for循环在签入和签出日期之间进行迭代,然后生成一系列日期。问题是,当我对mysql执行insert查询时,只有范围中的结束日期被插入到数据库表中。我的目标是将整个范围插入mysql,以便禁用日期选择器上已预订的日期。谁能告诉我我做错了什么,请看下面我的代码

我已经尝试使用date period对象,并在phpmyadmin中探索了日期范围字段的所有数据类型

我还尝试为日期范围使用单独的表

if(isset($_POST['apmt'])){

$value = $_POST['apmt'];
$ds = $_POST['ds'];
$de = $_POST['de'];
$d = $_POST['d'];


 try{ 
$dateb = $de;
$datea = $ds;

  for ($i = $datea; $i <= $dateb; $i++)
  {
          $dr = date("Y-m-d", strtotime($i));
  }  


$query = "INSERT INTO bookings SET apmt = :apmt, dateStart = :dateStart, dateEnd = :dateEnd, dateRange = :dateRange, totalDays = :totalDays, date = NOW(), clientID = '".$_SESSION['ID']."' ";
$s = $pdo->prepare($query);
$s->bindvalue(":apmt", $value);
$s->bindvalue(":dateStart", $ds);
$s->bindvalue(":dateEnd", $de);
$s->bindvalue(":dateRange", $dr);
$s->bindvalue(":totalDays", $d);
$s->execute();

$id = $pdo->lastInsertId();

if($id > 0 ){

    $table = "";
    $table .= '<table style="text-align:center;width:100%;margin:auto"><tr><th>APARTMENT</th><th>DATE START</th><th>DATE END</th><th>DAYS</th></tr>';
    $table .= '<tr><td>' .$value. '</td>';
    $table .= '<td>' .$ds. '</td>';
    $table .= '<td>' .$de. '</td>';
    $table .= '<td>' .$d. '</td>';
    $table .= '</tr></table>';
    echo $table ."</br>";

}

}
catch (PDOException $e) {
  $output = "Unable to connect to database server" . $e->getMessage();
  echo "$output";
  exit();   
}

}

因此,您定义的问题来自于for循环,它给出了意外的结果,您在每次迭代后分配$br的值,这就是为什么在循环完成时,最后一个日期存储在$br中

我推荐以下解决方案,因为它将是以后最容易操作的解决方案,并为您提供最干净的代码。通过使用数组替换$br,您可以在每次迭代后向其追加一项。当插入到数据库中时,使用该函数可以按照您想要的方式对其进行字符串化,而无需使用粗糙的字符串操作

$dr = [];
for ($i = $datea; $i <= $dateb; $i++)
{
    array_push($dr, date("Y-m-d", strtotime($i)));
}  
进一步建议
在使用问题中略微暗示的SQL日期模式的情况下,存储范围不是默认值。因此,存储为文本或Varchar可能是您最好的选择,然后遍历字符串date、date、date的范围,并分别为每个分解的字符串创建一个新的日期PHP对象。

如果您包括表模式,并给我们一些示例和预期结果,这将有所帮助谢谢@user3035660,意义重大。你会考虑选择这个答案吗?谢谢,@user3035660
$drString = implode(',', $dr) # (String) "date,date,date,date"