Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: INSERT INTO (mySQL) nie dziala
Forum PHP.pl > Forum > PHP
a600user
Witam,

Mam sobie kod PHP, ktory zaklada tabele w bazie i potem probuje wpisac do niej dane. Tabela jest pusta, zreszta zakladanie tabeli dziala OK.
Problem jest, ze kod nie chce dzialac i wywala sie blad skladniowy (Syntax error).

  1. <?php
  2. $sql_02="INSERT INTO '$tablename' ('aktywna', 'typ') VALUES ('$aktywna', '$typ')"; 
  3.  $result_02=@mysql_query($sql_02);
  4.  if (!$result_02) {
  5. exit ('<P>Query Error : ' . mysql_error() . '</P>');
  6.  }
  7. ?>


podczas gdy wklepanie z konsoli linii w terminalu mySQLa:

INSERT INTO xxx (aktywna, typ) VALUES (1,1);

Dziala ....

Wie ktos, w czym tkwi przyczyna ? Zmienne sa OK, nazwy pol tez.

Dziekuje
wielokropek
  1. <?php
  2. $sql_02="INSERT INTO $tablename ('aktywna', 'typ') VALUES ('$aktywna', '$typ')";
  3. ?>

Przy nazwie tabeli chyba nie potrzeba apostrofów.
rolnix
Przy nazwach pól i tabel stosujemy (chociaż nie musimy) tzw. apostrof podtyldowy - `xxx`. Przy wartościach są apostrofy normalne 'xxx'.
PawelC
  1. <?php
  2.  
  3.  $tablename=$_POST['tablename'];
  4.  $aktywna=$_POST['aktywna'];
  5.  $typ=$_POST['typ'];
  6.  $sql_02="INSERT INTO $tablename (`id`,`aktywna`, `typ`) VALUES ('null','$aktywna', '$typ')"; 
  7. $result_02=mysql_query($sql_02) or die(mysql_error());
  8. if (!$result_02) {
  9.  exit ('<P>Query Error : ' . mysql_error() . '</P>');
  10. }
  11.  ?>

Sprawdź ten kod powinien działać. A $tablename to pobierasz z formularza metodą post, czy w linku i metodą get?
john_doe
yo, pewnie masz jeszcze oprócz tych dwóch pól jakieś ID, które samo sie inkrementuje czy coś w tym stylu .
Musisz dać values ('', xxxxx,xxxxx) i przedtem tez i bedzie git
a600user
Cytat(john_doe @ 2.11.2007, 15:23:17 ) *
yo, pewnie masz jeszcze oprócz tych dwóch pól jakieś ID, które samo sie inkrementuje czy coś w tym stylu .
Musisz dać values ('', xxxxx,xxxxx) i przedtem tez i bedzie git


Witam ponownie,

Tak, baza zawiera znacznie wiecej pol, jednak dla przejrzystosci zmienilem kod tak, jakby mialo sie dodawac tylko kilka wartosci.
Pierwszym polem jest `polozenie` z autoinkrementacja.

I teraz mialem napisac, co chodzi, a co nie - gdyby nie to, ze teraz blad dotyczy pierwszego zapytania sql (w kodzie, ktory podalem chodzilo o drugie zapytanie). Pierwsze zapytanie zwyczajnie tworzy tabele i jest to CTRL+C / CTRL+V z dumpa sql-a, znaczy sie wyeksportowalem baze do pliku tekstowego i wycialem odpowiednie wpisy tworzace interesujaca mnie tabele. Jedynie nazwe tabeli zmienilem, bo ma byc ona co chwila inna (tak, tak) - i to jest odpowiedz do poprzednika, ktory pytal sie, skad biore $tablename. A wiec $tablename biore poprzez zlaczenie przedrostka i aktualnej daty, wiec zadne GETy, POSTy itd smile.gif
A powyzsza czesc skryptu to inicjalizator calej zabawy, w tym wlasnie bazy danych. Z tym, ze wlasnie przestala mi chodzic czesc tworzaca tabele w bazie, bardzo to dziwne.

Moze wrzuce blad, jaki teraz dostaje:
Query Error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''polozenie' int(6) NOT NULL auto_increment, 'aktywna' tinyint(1) NOT NULL, '' at line 2

I nie mam pojecia, jak sprawdzic, o co chodzi (moze jakies sugestie, jakis parser albo cokolwiec co da mi clue) ?
Linijka kodu odpowiadajaca powyzszemu to:
  1. <?php
  2. $sql_01="CREATE TABLE IF NOT EXISTS `$tablename` (
  3. 'polozenie' int(6) NOT NULL auto_increment,
  4. 'aktywna' tinyint(1) NOT NULL,
  5. ?>


Czyzby chodzilo o to, ze nie mozna wpisywac rekordu czesciowo, jesli pola maja ceche NOT NULL (czyli ze chcac wpisac jedna wartosc trzeba i tak sie przemeczyc i wpisac wszystkie 30 pol, czy ile tam tego mam) ? Jesli tak - to by sie zgadzalo, ze moj "skrot" byl batem na samego siebie, bo gdybym nie skracal, wszystko chodziloby.
Tylko o co teraz chodzi z tym bledem przy tworzeniu tabeli w bazie ?
Baza otwarta i wybrana (use), dalej nie mam pojecia, w czym rzecz.

Macie jakies pomysly ?

Dziekuje
PawelC
daj mi nazwy kolumn w tabeli do której chcesz dodać dane, to Ci napisze ten skrypt i będziesz wiedział gdzie miałeś błędy.
kevinsz
Cytat(a600user @ 2.11.2007, 18:44:30 ) *
Moze wrzuce blad, jaki teraz dostaje:
Query Error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''polozenie' int(6) NOT NULL auto_increment, 'aktywna' tinyint(1) NOT NULL, '' at line 2

I nie mam pojecia, jak sprawdzic, o co chodzi (moze jakies sugestie, jakis parser albo cokolwiec co da mi clue) ?
Linijka kodu odpowiadajaca powyzszemu to:
  1. <?php
  2. $sql_01="CREATE TABLE IF NOT EXISTS `$tablename` (
  3. 'polozenie' int(6) NOT NULL auto_increment,
  4. 'aktywna' tinyint(1) NOT NULL,
  5. ?>


Nazwy kolumn mogą być albo w w takich apostrofach ` albo w ogóle bez. Ale "zwykłe" winksmiley.jpg apostrofy ' generują błąd w składni.
a600user
Cytat(ExPlOiT @ 2.11.2007, 18:52:20 ) *
daj mi nazwy kolumn w tabeli do której chcesz dodać dane, to Ci napisze ten skrypt i będziesz wiedział gdzie miałeś błędy.


Juz dziala, dzieki wszystkim.
Dwie rzeczy naraz pomogly: zmiana ' na podtyldowy ` wprzypadku nazw tabel oraz kolumn, no a po drugie ta autoinkrementacja smile.gif
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.