Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pierwszy problem - dodawanie rekordów?
Forum PHP.pl > Forum > Bazy danych > MySQL
strife
Mam sobie taki kod, i po nim pojawia mi sie błąd: Bład skryptu, odpowiedź serwera: Column count doesn't match value count at row 1
Nie wiem o co biega bo jakiejś kilka dni temu zaczołem MySQL, acha żeby nie było szukałem w wyszukiwarce, ale niestety nie znalazłem dokładnie czegoś takiego... prosze o pomoc...
  1. <?php
  2.  
  3. $sql = mysql_connect(localhost, root, krasnal);
  4. $wykonaj = mysql_select_db(&#092;"info\"); // Baza info jest już stworzona...
  5.  
  6. $zapytanie = &#092;"CREATE TABLE nba (id char(3) NOT NULL, imie char(30), lata char(3), punkty char(3), mistrzostwa char(3), PRIMARY KEY(id))\";
  7. $wykonaj = mysql_query($zapytanie); // Tutaj ładnie tworzy tabele...
  8.  
  9. $zapytanie = &#092;"INSERT INTO nba VALUES(Jordan, 13, 32, 6)\";
  10. $wykonaj = mysql_query($zapytanie);  // Tutaj pojawia się błąd
  11.  
  12.  if (!($wykonaj=mysql_query($zapytanie))) /* Sprawdza czy wykonanie powiodło się */
  13.  {
  14.  $error = mysql_error($sql); /* Kopiuje zawartość błędu do zmiennej $error */
  15.  echo &#092;"Bład skryptu, odpowiedź serwera: $error\"; /* Drukuje błąd na stronie */
  16.  }
  17.  else /* Jeśli błąd nie wystąpił kontynuuje działanie programu */
  18.  {
  19.  echo &#092;"Reszta kodu...\";
  20.  }
  21.  
  22. ?>


btw. z góry przepraszam za nieświadome(o ile są) błędy w bbcode...
kszychu
Jedna rada: Używaj insertów typu pole = wartość, np.
  1. INSERT
  2. INTO nba SET pole1 = 'Jordan', pole2 = 13

Odnośnie Twojego problemu: podałeś innąliczbę wartości niż jest liczba wymaganych pól w bazie. Zapomniałeś o id, które niestety nie jest autoincrement a jest not null, więc musisz je podać.
sf
  1. INSERT
  2. INTO tabela (id, nazwa, innanazwa) VALUES(12, 'auto', 'samochod');


Jak id ma być automatycznie inkrementowane to można tak :

  1. INSERT
  2. INTO tabela (nazwa, innanazwa) VALUES('auto', 'samochod');
strife
Stokrotne dzięki mój pierwszy rekrord w życiu utworzony smile.gif smile.gif smile.gif smile.gif smile.gif

Co do rad napewno skorzystam, już powoli kumam co i jak... I jeszcze jedno jeśli można to jaka jest różnica miedzy tworzeniem rekordów przez SET a przez VALUES??

Jeszcze Raz Wielkie Dzięki Macie u mnie piwo...
sf
Jak dla mnie zapisu... szczegóły pewnie będą na mysql.org, więc wystarczy przeczytać ;}
kszychu
Cytat(sf @ 2005-01-07 19:14:36)
Jak dla mnie zapisu...

Dokładnie, mniejsza szansa na "rypnięcie się" w liczbie argumentów smile.gif
sf
... jak jesteśmy już przy zapisie to ostatnio ujrzałem rozwiązanie, które bardzo mi przypadło do gustu :
  1. <?php
  2. $sql = sprintf(&#092;"SELECT pname, pid FROM sth_users, sth_pictures WHERE pgid = %d, uname = '%s' ORDER BY id LIMIT %d, %d\", $_POST['gid'], $_SESSION['uname'], %iStart, $iMax);
  3.  
  4. ?>


Zdecydowanie ładniej to wygląda niż wrzucanie zmiennych do apostrofów :}
kszychu
sprintf() służy do formatowania stringa. Jeśli nie potrzebujemy w selekcie liczb w formacie np. '02' to nie jestem pewien, czy warto angażować jakiś funkcje do tworzenia łańcuchów zmiennych.
Poza tym, nie ładowałbym "niesprawdzonych" $_POST czy innych superglobalnych bezpośrednio do zapytania...

A przy okazji, robi się OT, więc proponuję zakończyć nasze dywagacje w tym wątku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.