J'ai une table mysql appelé les messages avec un champ datetime appelé POST_DATE
Voici une capture d'écran de la table de base de données:php mettre à jour les dates dans chaque colonne de table MySQL afin qu'ils incrémentation automatique d'un jour
Je veux mettre la POST_DATE pour la première ligne à la date d'aujourd'hui, puis ajouter un jour à chacun des post_dates après jusqu'à ce qu'ils soient tous mis à jour - donc si aujourd'hui le 22 septembre 2017 et il y a 5 les lignes, les champs post_date seraient:
2017-09-22 12:00:00
2017-09-23 12:00:00
2017-09-24 12:00:00
2017-09-25 12:00:00
2017-09-26 12:00:00
Et s'il y a 50 lignes, il avance de 50 jours, etc.
Ma dernière approche est d'obtenir le nombre total de lignes à l'aide mysqli_num_rows() et stocker cette valeur dans une variable.
J'ai essayé d'utiliser date()
et mktime()
pour créer une « date de début » et « date de fin », puis une boucle foreach pour mettre à jour les dates de cette gamme.
Mais cela ne fonctionne pas. Voici le code:
$servername = "localhost";
$username = "user";
$password = "password";
$dbname = "database_name";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//begin if statement to get row count
if ($result = mysqli_query($conn, "SELECT * FROM Posts")) {
/* determine number of rows result set */
$row_cnt = mysqli_num_rows($result);
/* close result set */
mysqli_free_result($result);
}
//end if statement to get row count
// create foreach loop with a date range equal to the number of rows, and update the post_date values by one day as many times as there are rows in the table
$today = date("Y-m-d");
$begin = new DateTime($today);
list($y,$m,$d)=explode('-',$today);
$day_last = Date("Y-m-d", mktime(0,0,0,$m,$d+$row_cnt,$y));
$end = new DateTime($day_last);
$daterange = new DatePeriod($begin, new DateInterval('P1D'), $end);
foreach($daterange as $date) {
$sql_date_update = "UPDATE Posts SET post_date = $date->format("Y-m-d h:i:s")";
if ($conn->query($sql_date_update) === TRUE) {
echo "Record updated successfully"."<br>";
} else {
echo "Error updating record: " . $conn->error;
}
}
J'ai essayé tellement d'approches différentes et rien ne fonctionne. Tous les conseils seraient grandement appréciés.
Merci M. Ceci est @ Michael un comportement étrange pour moi . J'ai couru cette fois et ça a marché. Mais après cela, il renvoie l'erreur suivante: # MySQL a retourné un ensemble de résultats vide (c'est-à-dire zéro rangée). J'ai essayé puis essayé de supprimer toutes les lignes et en créer de nouvelles, mais en retournant toujours le même résultat. – ramsjared16
J'ai édité ma réponse parce que ce n'était pas exactement ce que vous vouliez archiver –
merci beaucoup, cela a fonctionné parfaitement! Très appréciée! – ramsjared16