簡體   English   中英

將日期從一個表復制到另一個表並在mysql中更改格式

[英]Copying date from one table to another and change format in mysql

我正在嘗試使用以下代碼將日期(Ymd)從一個數據庫表復制到格式為(Ymd H:i:s)的另一數據庫表:

<?php
  $host = "host";
  $user = "user";
  $password = "pass";
  $database1 = "home";
  $database2 = "teste";

  $con1 = mysqli_connect($host, $user, $password, $database1);
  mysqli_set_charset($con1, 'utf8');
  if (!$con1) {die(mysqli_connect_error($con1));}

  $select = "SELECT * FROM table1";
  $result = mysqli_query($con1, $select) or die(mysqli_error($con1));

  while($row = mysqli_fetch_assoc($result)) {

    $id_product = $row[prod_id];
    $date = date_create_from_format('Y-m-d', '$row[date]');
    $date_add = date_format($date, 'Y-m-d H:i:s');

    $con2 = mysqli_connect($host, $user, $password, $database2);
    mysqli_set_charset($con2, 'utf8');
    if (!$con2) {die(mysqli_connect_error($con2));}

    $ins = "INSERT INTO `table2` (id_product, date_add) VALUES ('$id_product',$date_add)";
    $mysq = mysqli_query($con2, $ins) or die(mysqli_error($con2));
  }
?>

此“ INSERT”代碼不起作用,因為在table2上添加的日期是“ 0000-00-00 00:00:00”,並且我確定table1上的日期是例如2017-02-13。 可以檢查我的代碼在哪里錯誤? 我檢查了幾乎相同的其他問題,並按照它們進行操作,但是我的結果從未奏效。

謝謝

您可以這樣做:

INSERT INTO `table2` (id_product, date_add)
    SELECT prod_id, date
    FROM table1;

如果datedate數據類型,且date_adddatetime ,則將添加時間部分並將其自動設置為午夜。

首先,您的代碼有幾個問題。 一個不錯的IDE會在編輯器中向您顯示。

代碼問題

mysqli_set_charset($con1, 'utf8');

在確保建立連接之前,您嘗試使用連接設置字符集。

if (!$con1)
{
    die(mysqli_connect_error($con1));
}

mysqli_connect_error()不帶任何參數, $con1false

    $id_product = $row[prod_id];

沒有常量prod_id 您的意思是$id_product = $row['prod_id']; 代替。

    $date       = date_create_from_format('Y-m-d', '$row[date]');

您試圖從文字字符串'$row[date]'生成日期,而不是從數據庫中獲取的日期$row['date']

    $con2 = mysqli_connect($host, $user, $password, $database2);

您正在為每個單個記錄創建一個新的數據庫連接,而不在使用后關閉它。

    $ins = "INSERT INTO `table2` (id_product, date_add) VALUES ('$id_product',$date_add)";

$date_add是一個字符串,需要用引號引起來。

你的問題

如果您在數據庫表中使用正確的類型,MySQL會在日期上自動添加00:00:00 ,因此您無需直接解決該問題,正如Gordon Linoff所說。

如果不是這種情況,則日期仍將作為字符串傳輸,因此簡單的字符串連接解決了該問題。

$date_add = $row['date'] . ' 00:00:00';

重構代碼

提議的清除后,您的代碼如下所示(並執行您想要的操作):

<?php
$host      = "host";
$user      = "user";
$password  = "pass";
$database1 = "home";
$database2 = "teste";

$source = mysqli_connect($host, $user, $password, $database1) or die(mysqli_connect_error());
mysqli_set_charset($source, 'utf8');

$target = mysqli_connect($host, $user, $password, $database2) or die(mysqli_connect_error());
mysqli_set_charset($target, 'utf8');

$sql    = "SELECT * FROM table1";
$result = mysqli_query($source, $sql) or die(mysqli_error($source));

while ($row = mysqli_fetch_assoc($result))
{
    $id   = $row['prod_id'];
    $date = $row['date'] . ' 00:00:00';
    $sql  = "INSERT INTO `table2` (id_product, date_add) VALUES ('$id','$date')";
    mysqli_query($target, $sql) or die(mysqli_error($target));
}

mysqli_close($target);
mysqli_close($source);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM