• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Pobranie daty z bazy i zapisanie jej ponownie

Object Storage Arubacloud
0 głosów
257 wizyt
pytanie zadane 27 listopada 2018 w SQL, bazy danych przez Bartłomiej Bolesta Obywatel (1,630 p.)
zamknięte 18 grudnia 2018 przez Bartłomiej Bolesta

Pobieram w pętli FOR Selectem z bazy daty i w pewnych okolicznościach chce je ponownie wysłać w inne miejsce.
 

for($i=0; $i<$how_many; $i++)
{
	$time[] = $end[$i]['Time'];
}
$db->query('UPDATE nazwa SET Temp='.$time[$i].' WHERE ID='.$IDEnd[$i].'');

I niestety wyrzuca mi błąd:

 

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '15:47:45 WHERE ID=1' at line 1 in (...)

Błąd wywala chyba dlatego, że tu powyżej odczytuje tylko godzinę, bez daty, mimo, że sprawdzając var_dump mam i datę i godzinę.
 

array(3) { [0]=> string(19) "2018-11-27 15:47:45" (...)

Nie rozumiem jednak czemu i jak to naprawić? Data jest w formie stringa i zawiera całość, a jakby pomijało rok, miesiąc, dzień? Czy jednak muszę to jakoś wpierw obrobić? Próbowałem DateTime::createFromFormat, ale to bezpośrednio dostałem błąd, że tak nie można, więc już nie wiem.

komentarz zamknięcia: problem rozwiązany

1 odpowiedź

+1 głos
odpowiedź 27 listopada 2018 przez Chess Szeryf (76,710 p.)
edycja 27 listopada 2018 przez Chess
<?php
$conn = new mysqli('localhost','root','','rr');

$date_time = "select `date_time`, `id` from `test1`;";
$date_time = $conn->query($date_time);


while($result = $date_time->fetch_array()) {
	$validate = $conn->query("UPDATE `trees` SET `kind` = '{$result[0]}' WHERE `id` = {$result[1]};");
	var_dump($validate);
}

?>
<?php
while($result[] = $date_time->fetch_array(MYSQLI_NUM));

for($i=0;$i<count($result);$i++) {
	if(!empty($result[$i])) {
		$validate = $conn->query("UPDATE `trees` SET `kind` = '{$result[$i][0]}' WHERE `id` = {$result[$i][1]};");
		var_dump($validate);
	}
}

?>
CREATE TABLE `test1` (
  `date_time` datetime DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `trees` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `kind` varchar(20) DEFAULT NULL,
  `description` varchar(20) DEFAULT NULL,
  `third` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Sprawdź, czy masz w tabeli ustawiony odpowiedni typ, np. datetime lub char, varchar, a nie np. int.

$db->query("UPDATE nazwa SET Temp='{$time[$i]}' WHERE ID={$IDEnd[$i]};");

Poprawiłem Twoje zapytanie, ponieważ było błędne, typ datetime jest podawany jako string, czyli cudzysłowy trzeba podać bądź apostrofy, a pomiędzy nimi właśnie trzeba wpisać datę we właściwym formacie.

komentarz 27 listopada 2018 przez Bartłomiej Bolesta Obywatel (1,630 p.)
Zapomniałem to dopisać - na pewno mam ustawiony datetime.

Niestety, nie bardzo rozumiem Twoją odpowiedź, ale zostawiłem to w spokoju i poszedłem robić kod dalej, czekając na odpowiedź, a potem nawet nie zauważyłem jak do tego naturalnie wróciłem i ... zadziałało 0.o. Przepisało poprawnie, bez błędów. Czasami to taka magia się uprawia, że człowiek sam nie wie, co się dzieje.

Natomiast te poprawione zapytanie jest prawidłowe tylko inaczej zapisane. Chyba, że nie wiem, że nie powinno się używać z jakichś powodów takiego zapisu?
1
komentarz 27 listopada 2018 przez Chess Szeryf (76,710 p.)

Pozwoliłem sobie zedytować odpowiedź i dookreślić o co mi chodzi. Reasumując, po wyrenderowaniu przez interpreter PHP, zapytanie, które napisałeś wyglądałoby tak:

UPDATE nazwa SET Temp=2018-11-27 18:00:00 WHERE ID=5;

Widzisz teraz zapewne, co było błędem.

Podobne pytania

0 głosów
2 odpowiedzi 1,779 wizyt
0 głosów
1 odpowiedź 190 wizyt
pytanie zadane 16 lutego 2017 w SQL, bazy danych przez Logan85 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 2,461 wizyt
pytanie zadane 21 lipca 2015 w SQL, bazy danych przez mowmiheniek Stary wyjadacz (11,900 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...