logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak odczytać tekst i datę z tabeli MySQL w PHP bez OOP?

27 Maj 2007 12:18 4058 33
Najlepsze odpowiedzi

Jak w PHP bez OOP odczytać z MySQL tekst i datę do tablicy oraz poprawnie zbudować zapytanie INSERT, żeby nie było błędów składni i nic nie ginęło w bazie?

Aby odczytać wpisy z MySQL w starym PHP, użyj `mysql_query()` i pętli `while` z `mysql_fetch_row()` albo `mysql_fetch_array()`, a wartości pobieraj kolejno z wiersza lub po nazwach pól [#3940115] [#3941399] Przy wstawianiu danych podaj jawnie kolumny w `INSERT INTO bloog (tresc_wpisu,data,tytul_wpisu) VALUES (...)` i otocz wartości tekstowe apostrofami; `mysql_query()` wywołuj z samą zmienną z zapytaniem, bez dodatkowych cudzysłowów [#3939595] [#393995?]. Parse error wynikał z błędnie złożonego łańcucha SQL w PHP, m.in. z użycia zmiennych bez poprawnego złączenia i braków w apostrofach, więc warto też wyświetlić `mysql_error()` i sprawdzić, co faktycznie zawiera zmienna z zapytaniem [#3939874] [#3933035] Datę można generować przez `date('Y-m-d')`, a jeśli chcesz trzymać czas, padła też sugestia użycia unixowego timestampu z `time()` i potem `UNIX_TIMESTAMP()` w MySQL [#3939516] [#3932513] Jeśli chcesz policzyć liczbę rekordów, użyj `mysql_num_rows($res)`, ale nie próbuj czytać wszystkich wyników jedną pustą pętlą `while` — `mysql_fetch_row()` zwraca tylko jeden kolejny wiersz na każde wywołanie [#3941304] [#3940605]
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA
  • #1 3925391
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #2 3929205
    Konto nie istnieje
    Konto nie istnieje  
  • #3 3929297
    lambda2541
    Poziom 12  
    Posty: 26
    Ocena: 2
    fajnie by bylo jakbys pokazal nam ktora to jest ta 82 linia bo tak to ciezko.
  • #4 3929448
    Konto nie istnieje
    Konto nie istnieje  
  • #5 3932475
    lambda2541
    Poziom 12  
    Posty: 26
    Ocena: 2
    najlepszy to ja w te klocki nie jestem, ba..nawet dobry nie jestem,hehe.
    sluchaj, sprawdz czy typ pola w tabeli jest odpowiedni do danych ktore chcesz w niej umiescic.
    Np. tresc_wpisu i tytul_wpisu to powinien byc typ TEXT a data to rzecz jasna DATE.
    jesli tak masz a nadal nie dzila to moze trzeba przed wyslaniem tego do tabeli konwersje zrobic, przy dacie to chyba integer.
    probuj cos w tym kierunku pomotac.
    powodzenia.
  • #6 3932499
    Konto nie istnieje
    Konto nie istnieje  
  • #7 3932513
    jacekowski
    Poziom 19  
    Posty: 297
    Pomógł: 13
    Ocena: 10
    date najlepiej trzymac w postaci unixowego timestampu a funkcja time(); ladnie go wypluwa a w mysqlu jest UNIX_TIMESTAMP()
  • REKLAMA
  • #8 3932527
    Konto nie istnieje
    Konto nie istnieje  
  • #10 3932626
    Konto nie istnieje
    Konto nie istnieje  
  • #11 3932837
    tropicalBula
    Poziom 15  
    Posty: 94
    Pomógł: 14
    Ocena: 3
    Spróbuj zmienić linię:
    $nowy_wpis="INSERT INTO nazwa_tabeli VALUES ($_POST['tresc_wpisu'], $data, $_POST[tytul_wpisu])

    na:
    $nowy_wpis="INSERT INTO nazwa_tabeli VALUES ('" . $_POST['tresc_wpisu'] . "', '$data' '" . $_POST[tytul_wpisu] . "')"


    Pozdrawiam
    dodałem apostrofy...
  • REKLAMA
  • #12 3932852
    Konto nie istnieje
    Konto nie istnieje  
  • #14 3932998
    Konto nie istnieje
    Konto nie istnieje  
  • #15 3933035
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Witam, zobacz za pomocą
    echo $nowy_wpis;
    Co zawiera ta zmienna i czy ma sens. Sprawdź też czy nie masz błędów składniowych (brak średnika na końcu linii np.). I jeszcze jedna uwaga - Nie stosuj niepotrzebnie "". Ciąg znaków umieszczony w cudzysłowach będzie parsowany i będą tam wyszukiwane zmienne. Jeśli jest tam sam tekst, to użyj ' ' (apostrofów). To najprostsza optymalizacja kodu.

    Pozdrawiam, Krzysztof.
  • #16 3933063
    Konto nie istnieje
    Konto nie istnieje  
  • #17 3933077
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Witam, to wygląda tak jakbyś nie miał średnika na końcu linii przed tym echem, bo taki sam komunikat pokazuje taki kod:
    
    $a = "aaaa"
    echo $a;
    
    Nie będzie błędu jeśli w pierwszej linijce na końcu będzie średnik.

    Pozdrawiam, Krzysztof.
  • #18 3939516
    Konto nie istnieje
    Konto nie istnieje  
  • #19 3939595
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Witam, może mamy innego MySQLa ale mój nie domyśla się po podaniu trzech wartości co ma wpisać do tabeli w której są cztery kolumny. Wypisuje błąd: "ERROR 1136 (21S01): Column count doesn't match value count at row 1". Wykonaj zapytanie tak:
    'INSERT INTO bloog (tresc_wpisu,data,tytul_wpisu) VALUES ('.$_POST['tresc_wpisu'].','.$data .', '.$_POST[tytul_wpisu].')'

    Jeśli coś nie działa, to najprościej użyj funkcji do raportu błędów, albo ręcznie podłącz się do bazy i zobacz czy zapytania działają. I nie używaj niepotrzebnie cudzysłowów, to tylko spowalnia skrypt.

    Pozdrawiam, Krzysztof.
  • #20 3939794
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #21 3939874
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Witam, może powiesz coś więcej, co wypisuje mysql_error() ? I czy kiedy wykonasz takie zapytanie:
    'INSERT INTO bloog (tresc_wpisu,data,tytul_wpisu) VALUES(\'test\',\'0000-00-01\',\'test2\')'
    To też nie będzie działać ? (Zamieniłem ' w środku ciągu na \', żeby działało w php) W tym które podałem wyżej jest jeden błąd, skopiowałem go bezpośrednio z Twojego kodu wyżej, powinno być
    $_POST['tytul_wpisu']
    I powinny być apostrofy otaczające wartości wprowadzane do bazy

    Pozdrawiam, Krzysztof.
  • #22 3939894
    Konto nie istnieje
    Konto nie istnieje  
  • #23 3939946
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Zdaje się że tak:
    'INSERT INTO bloog (tresc_wpisu,data,tytul_wpisu) VALUES (\''.$_POST['tresc_wpisu'].'\',\''.$data .'\',\''.$_POST['tytul_wpisu'].'\')'
  • #24 3939987
    Konto nie istnieje
    Konto nie istnieje  
  • #25 3940035
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Witam, z tego co ja się orientuję, nie ma do tego gotowej funkcji. Najlepiej użyć mysql_fetch_row w pętli i po kolei odczytwywać każdy zwrócony wiersz wyniku. Przykłady uzycia są na stronie funkcji.

    Pozdrawiam, Krzysztof.
  • #26 3940072
    Konto nie istnieje
    Konto nie istnieje  
  • #27 3940115
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Funkcji można użyć tak:
    $res = mysql_query('SELECT * FROM bloog');
    
    while($row=mysql_fetch_row($res)) {
    echo $row[0];
    echo $row[1];
    echo $row[2];
    }
    Powyższy kod wypisze wszystkie wpisy po kolei. Możesz też wygenerować sobie tablicę asocjacyjną funkcją mysql_fetch_assoc, może będzie jaśniejsza - ale różni się tylko tym że zamiast numerów będą nazwy pól. Funkcja odczytuje jeden wiersz wyniku zapytania a pętla ten wiersz przerabia.

    Mając datę jako ciąg znaków możesz odczytać ją funkcją date_parse

    Pozdrawiam, Krzysztof.
  • #28 3940530
    Konto nie istnieje
    Konto nie istnieje  
  • #29 3940605
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Czy kolega na pewno wyraźnie przeglądał tego manuala ?
    http://pl2.php.net/date

    Zresztą kolega już tej funkcji używa, ale dla zapisania daty a nie godziny... Wystarczy zmienić format.

    Ilość wyników zapytania:
    http://pl.php.net/manual/pl/function.msql-num-rows.php

    mysql_fetch_row zwraca z każdym wywołaniem jeden, kolejny wynik. Nie zwraca wszystkich naraz :!:
  • #30 3940642
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

✨ Dyskusja dotyczy odczytu tekstu i daty z tabeli MySQL w PHP bez użycia programowania obiektowego (OOP). Poruszono problem poprawnego zapisu danych do bazy, zwłaszcza formatowania zapytań SQL w stylu proceduralnym, z uwzględnieniem odpowiedniego użycia apostrofów i średników. Zwrócono uwagę na typy danych w tabeli (TEXT dla tekstu, DATE lub UNIX_TIMESTAMP dla daty) oraz na konwersję daty do formatu zgodnego z MySQL, np. za pomocą funkcji time() i UNIX_TIMESTAMP(). Omówiono także metody odczytu danych z bazy do tablic PHP, wskazując na użycie funkcji mysql_fetch_row() i mysql_fetch_assoc() w pętli while, co pozwala na iteracyjne pobieranie kolejnych wierszy wyników zapytania. Podkreślono, że mysql_fetch_row() zwraca pojedynczy wiersz jako tablicę indeksowaną numerycznie, a mysql_fetch_assoc() jako tablicę asocjacyjną z nazwami kolumn. Wskazano błędy w pętlach for i while, takie jak brak warunków zakończenia lub niepoprawne użycie zmiennych, oraz konieczność poprawnego formatowania zapytań SQL i obsługi błędów za pomocą mysql_error(). Poruszono także problem zapisu i odczytu czasu w formacie HH:MM:SS oraz integracji daty i czasu w bazie. Wskazano, że do przechowywania daty i czasu najlepiej używać typów DATE, TIME lub DATETIME w MySQL, a w PHP formatować je funkcjami date() i date_parse(). Dyskusja zawierała przykłady kodu proceduralnego PHP do łączenia się z bazą, wykonywania zapytań INSERT i SELECT oraz iteracyjnego odczytu wyników do tablic, z uwzględnieniem poprawnej składni i optymalizacji kodu.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA