Avatar billede Slettet bruger
30. september 2004 - 14:50 Der er 77 kommentarer og
1 løsning

Underlig fejl i mysql query

Jeg har denne linie i mit script, det skal egentlig bruges til at lave brødkrummer, men jeg får en fejl i mysql syntax:

$que = mysql_query("SELECT * FROM '". $row[tab] ." WHERE id=". $_GET[id] ."") or die(mysql_error());

fejlen lyder: ..." use near ''nyheder WHERE id=9' at "...
Avatar billede Slettet bruger
30. september 2004 - 14:50 #1
$row[tab] er i dette tilfælde lig med nyheder, og id er lig med 9
Avatar billede bromer Nybegynder
30. september 2004 - 14:52 #2
$que = mysql_query("SELECT * FROM '". $row[tab] ."' WHERE id=". $_GET[id] ."") or die(mysql_error());
Avatar billede dennismp Nybegynder
30. september 2004 - 14:52 #3
Er det eksperten der har fjernet et ' (før where) ?
Avatar billede Slettet bruger
30. september 2004 - 14:53 #4
lol :S men det virker stadig ikke :(
Avatar billede Slettet bruger
30. september 2004 - 14:54 #5
hele "brødkrumme"-funktionen ->

    function setkrum($id)
        {
            // hent fra databasen fra den id der er aktuel.
            $query = mysql_query("SELECT * FROM menu WHERE id=". $id ."");
            // hent data
            $row = mysql_fetch_array($query);
            if($row[tekst] != 0)
                {
                // gem det sidste hentede data før det der allerede er
              $this->krumme = "<a href=\"index.php?pid=". $row[id] ."\">". $row[tekst] ."</a>". $this->krumme;
                }
            elseif($row[tekst] == 0)
                {
                $que = mysql_query("SELECT * FROM '". $row[tab] ."' WHERE id=". $_GET[id] ."") or die(mysql_error());
                $ro = mysql_fetch_array($que);
                $id = $ro[id];
                $tekst = $ro[$row[tab_tekst]];
                $this->krumme = "<a href=\"index.php?pid=". $row[id] ."&id=". $id ."\">". $tekst ."</a>". $this->krumme;
                }
            // er der en ovenliggende side
            if ($row[over] != 0)
            {
                $this->krumme = " &raquo; ". $this->krumme;
                // kør funktiionen igen bare med den nye id
                $this->setkrum($row[over]);
            }
            else
            {
                // returner brødsporet hvis der ikke er flere ovenliggende id'er
                return $this->krumme;
          }
      }
Avatar billede fennec Nybegynder
30. september 2004 - 14:55 #6
Der skal vel ikke bruges ' omkring et tabel navn:

$que = mysql_query("SELECT * FROM ". $row[tab] ." WHERE id=". $_GET[id] ."") or die(mysql_error());
Avatar billede dennismp Nybegynder
30. september 2004 - 14:56 #7
Prøv evt med
$que = mysql_query($sql="SELECT * FROM '". $row[tab] ." WHERE id=". $_GET[id] ."") or die(mysql_error() . '<br />SQL:' . $sql);

Hvilket output får du?
Avatar billede bromer Nybegynder
30. september 2004 - 14:57 #8
Altså.. det burde være:

$que = mysql_query("SELECT * FROM '". $row[tab] ."' WHERE id=". $_GET[id]);

Så har queryen ingen fejl med mindre at $row[tab] og $_GET[id] er mærkelige..
Avatar billede dennismp Nybegynder
30. september 2004 - 14:57 #9
Ah, fennec siger noget. Det skal være backticks (`) eller intet.
Avatar billede bromer Nybegynder
30. september 2004 - 14:58 #10
fennic: Du har ret.. jeg sumper.. så bare at hans ' ikke var afsluttet :)
Avatar billede Slettet bruger
30. september 2004 - 14:58 #11
jeg får:

SQL:SELECT * FROM 'nyheder WHERE id=9
Avatar billede Slettet bruger
30. september 2004 - 14:59 #12
altså efter at jeg har fjernet ' og '
Avatar billede Slettet bruger
30. september 2004 - 15:00 #13
ok jeg tåger lidt nu...
uden ' siger den: SQL:SELECT * FROM WHERE id=9

og med '': SQL:SELECT * FROM 'nyheder' WHERE id=9
Avatar billede Slettet bruger
30. september 2004 - 15:01 #14
er i allesammen blevet stumme :S ?
Avatar billede fennec Nybegynder
30. september 2004 - 15:06 #15
Du skal stadig ikke have ' omkring et tabelnavn. Det skal altså være sådan (min post 14:55:58):

$que = mysql_query("SELECT * FROM ". $row[tab] ." WHERE id=". $_GET[id] ."") or die(mysql_error());

eller som dennismp skrev i 14:57:31 med `:

$que = mysql_query("SELECT * FROM `". $row[tab] ."` WHERE id=". $_GET[id] ."") or die(mysql_error());
Avatar billede fennec Nybegynder
30. september 2004 - 15:08 #16
... Der er forskel på ' og `
Avatar billede bromer Nybegynder
30. september 2004 - 15:09 #17
Og der er ingen grund til at smide en tom streng på bagefter så det hele bliver til:

$que = mysql_query("SELECT * FROM `". $row[tab] ."` WHERE id=". $_GET[id]) or die(mysql_error());
Avatar billede Slettet bruger
30. september 2004 - 15:09 #18
Det ser rigtigt ud for mig, men den siger bare "incorrect table name ''"

altså som om der ikke står noget tabelnavn :S
mit script ser nu sådan ud:

                unset($bet);
                if($_GET[id] > 0)
                    {
                    $bet = "WHERE id=". $_GET[id] ."";
                    }
                $que = mysql_query("SELECT * FROM `". $row[tab] ."` ". $bet ."") or die(mysql_error());
Avatar billede Slettet bruger
30. september 2004 - 15:10 #19
bromer jeg er ikke helt med på hvad du har lavet der?
Avatar billede Slettet bruger
30. september 2004 - 15:11 #20
det jeg har ændret er bare fordi, at der ikke altid er et id.. det skulle ikke ændre noget
Avatar billede bromer Nybegynder
30. september 2004 - 15:13 #21
i den sidste del af queryen smider du en tom streng på ved at skrive . "". Det ændrer jo ikke strengen så derfor er det overflødigt.

Hvis den siger incorrect table name, så det jo fordi der ikke findes en tabel der hedde det. Har du printet væriden af $row[tab] og verificeret at der er en tabel med det navn?
Avatar billede Slettet bruger
30. september 2004 - 15:14 #22
Det her er ret weird:

Hvis jeg skriver: SELECT * FROM `$row[tab]` ", skriver den at der ikke er noget tabelnavn.

men hvis jeg skriver: SELECT * FROM ` $row[tab] ` ", så skriver den: Table 'balmer1. nyheder ' doesn't exist

... balmer1 er fordi databasen hedder balmer1
Avatar billede fennec Nybegynder
30. september 2004 - 15:14 #23
Jag vil gætte på du skal have " i dit Array udtræk:

$row["tab"]
$row["id"]
Avatar billede dennismp Nybegynder
30. september 2004 - 15:15 #24
er der ikke et mellemrum før/efter punktum ?

prøv balmer1.nyheder
Avatar billede Slettet bruger
30. september 2004 - 15:15 #25
hvad mener du?
Avatar billede Slettet bruger
30. september 2004 - 15:16 #26
Hvis jeg skriver: $que = mysql_query("SELECT * FROM `$row[tab] ` ". $bet ."") or die(mysql_error() . '<br />SQL:' . $sql);

så står der: Table 'balmer1. ' doesn't exist

Jeg synes virkelig at det her er weird..!
Avatar billede Slettet bruger
30. september 2004 - 15:17 #27
fennec hvad mener du?
Avatar billede bromer Nybegynder
30. september 2004 - 15:20 #28
Hvad hvis du skriver

$que = mysql_query(sprintf("SELECT * FROM `%s` %s,$row['tab'],$bet)) or die(mysql_error() . '<br />SQL:' . $sql);
Avatar billede bromer Nybegynder
30. september 2004 - 15:21 #29
$que = mysql_query(sprintf("SELECT * FROM `%s` %s",$row['tab'],$bet)) or die(mysql_error() . '<br />SQL:' . $sql);

sådan..
Avatar billede dennismp Nybegynder
30. september 2004 - 15:21 #30
fjern mellemrummet:
$que = mysql_query("SELECT * FROM `$row[tab]` ". $bet ."") or die(mysql_error() . '<br />SQL:' . $sql);
Avatar billede Slettet bruger
30. september 2004 - 15:21 #31
bare parse error på linien..
Avatar billede bromer Nybegynder
30. september 2004 - 15:23 #32
$que = mysql_query(sprintf("SELECT * FROM `%s`%s",$row['tab'],$bet)) or die(mysql_error() . '<br />SQL:' . $sql);

sku :)
Avatar billede Slettet bruger
30. september 2004 - 15:23 #33
dennis -> det er her hvor den bare siger: Incorrect table name ''

altså den kan ikke se at variablen indeholder noget.. tror jeg :S
Avatar billede Slettet bruger
30. september 2004 - 15:24 #34
bromer den siger det samme som dennis' gjorde :(  Incorrect table name ''
Avatar billede Slettet bruger
30. september 2004 - 15:24 #35
'' er ikke ", men ' + '
Avatar billede bromer Nybegynder
30. september 2004 - 15:24 #36
wicez: Hvad siger den, hvis du prøver det jeg har skrevet?
Avatar billede Slettet bruger
30. september 2004 - 15:25 #37
^^^^^^^^^^^der står det^^^^^^^^^^^^^^^^^^^^^

:P
Avatar billede Slettet bruger
30. september 2004 - 15:25 #38
som jeg skrev kl. 15.24.12
Avatar billede bromer Nybegynder
30. september 2004 - 15:25 #39
okay.. så er fejlen jo nok at der ikke er noget i $row['tab']. Sørg for at den variabel bliver sat korrekt.
Avatar billede bromer Nybegynder
30. september 2004 - 15:26 #40
ja.. jeg spurgte imens du rent faktisk svarede :)
Avatar billede Slettet bruger
30. september 2004 - 15:27 #41
kk...

der er noget i $row['tab'] - det kan du jo også se i det jeg skrev 15.14.02
Avatar billede bromer Nybegynder
30. september 2004 - 15:28 #42
Okay.. hvad siger den så med:

$que = mysql_query(sprintf("SELECT * FROM `%s`%s",$row[tab],$bet)) or die(mysql_error() . '<br />SQL:' . $sql);
Avatar billede Slettet bruger
30. september 2004 - 15:29 #43
det samme :(

Incorrect table name ''
Avatar billede bromer Nybegynder
30. september 2004 - 15:31 #44
Okay.. hvad giver

printf("SELECT * FROM `%s` : %s",$row[tab],$bet));

Det bør bare printe en streng..
Avatar billede Slettet bruger
30. september 2004 - 15:32 #45
parse error
Avatar billede bromer Nybegynder
30. september 2004 - 15:33 #46
printf("SELECT * FROM `%s` : %s",$row[tab],$bet);
Avatar billede fennec Nybegynder
30. september 2004 - 15:33 #47
Prøv at gemme den i en temp variabel:

$temp = $row["tab"];
$que = mysql_query("SELECT * FROM `$temp` $bet ") or die(mysql_error());
Avatar billede Slettet bruger
30. september 2004 - 15:33 #48
hvis jeg fjerne et af de 2 sidste ), så får jeg SELECT * FROM `` :
Avatar billede Slettet bruger
30. september 2004 - 15:34 #49
så er det den med incorrect table name
Avatar billede bromer Nybegynder
30. september 2004 - 15:37 #50
det er meget mærkeligt.. har du mulighed for at vise os dit script i en større sammenhæng. Jeg vil gerne se, hvordan du sætter din $row.. tror der er nogle problemer med enten dit variabel scope eller at du overskriver den på et tidspunkt.
Avatar billede Slettet bruger
30. september 2004 - 15:37 #51
det virker altså ret mærkeligt... for hver gang den siger incorrect table name, så burde det jo virke.!
Avatar billede Slettet bruger
30. september 2004 - 15:38 #52
Her er det hele ->

function setkrum($id)
        {
            // hent fra databasen fra den id der er aktuel.
            $query = mysql_query("SELECT * FROM menu WHERE id=". $id ."");
            // hent data
            $row = mysql_fetch_array($query);
            if($row[tekst] != 0)
                {
                // gem det sidste hentede data før det der allerede er
              $this->krumme = "<a href=\"index.php?pid=". $row[id] ."\">". $row[tekst] ."</a>". $this->krumme;
                }
            elseif($row[tekst] == 0)
                {
                unset($bet);
                if($_GET[id] > 0)
                    {
                    $bet = "WHERE id=". $_GET[id] ."";
                    }
                printf("SELECT * FROM `%s` : %s",$row[tab],$bet);
                $ro = mysql_fetch_array($que);
                $id = $ro[id];
                $tekst = $ro[$row[tab_tekst]];
                $this->krumme = "<a href=\"index.php?pid=". $row[id] ."&id=". $id ."\">". $tekst ."</a>". $this->krumme;
                }
            // er der en ovenliggende side
            if ($row[over] != 0)
            {
                $this->krumme = " &raquo; ". $this->krumme;
                // kør funktiionen igen bare med den nye id
                $this->setkrum($row[over]);
            }
            else
            {
                // returner brødsporet hvis der ikke er flere ovenliggende id'er
                return $this->krumme;
          }
      }

jeg har én tabel med alle mine sider i, id og link til hvilken fil der skal inkluderes... så er det jo så meningen at $this-> krumme skal replaces med --krum-- i min template.htm
Avatar billede bromer Nybegynder
30. september 2004 - 15:40 #53
hvilke felter har du i din tabel menu?
Avatar billede Slettet bruger
30. september 2004 - 15:41 #54
CREATE TABLE `menu` (
  `id` int(11) NOT NULL default '0',
  `link` varchar(255) NOT NULL default '',
  `tekst` varchar(255) NOT NULL default '',
  `beskrivelse` text NOT NULL,
  `se` int(11) NOT NULL default '0',
  `setil` int(11) NOT NULL default '0',
  `hvor` int(11) NOT NULL default '0',
  `andet` int(11) NOT NULL default '0',
  `over` int(11) NOT NULL default '0',
  `tab` varchar(255) NOT NULL default '',
  `tab_tekst` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;
Avatar billede bromer Nybegynder
30. september 2004 - 15:43 #55
Så skal denne virke... og det gør den

$que = mysql_query(sprintf("SELECT * FROM %s %s",$row["tab"],$bet)) or die(mysql_error() . '<br />SQL:' . $sql);
Avatar billede Slettet bruger
30. september 2004 - 15:44 #56
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 '' at line 1
SQL:


det virker jo næsten sygt
Avatar billede Slettet bruger
30. september 2004 - 15:47 #57
Den her krøver vidst at vi lægger 120 point til :S
Avatar billede bromer Nybegynder
30. september 2004 - 15:48 #58
hvad får du ud når du skriver

var_export($row);
Avatar billede fennec Nybegynder
30. september 2004 - 15:48 #59
Prøv lige denne så vi får SQL-sætningen ud også:

$que = mysql_query($sql=sprintf("SELECT * FROM %s %s",$row["tab"],$bet)) or die(mysql_error() . '<br />SQL:' . $sql);
Avatar billede Slettet bruger
30. september 2004 - 15:50 #60
Jeg får:

array ( 0 => '1', 'id' => '1', 1 => 'nyheder/index.php', 'link' => 'nyheder/index.php', 2 => 'Forsiden', 'tekst' => 'Forsiden', 3 => 'Her kan du bl.a. læse nyheder', 'beskrivelse' => 'Her kan du bl.a. læse nyheder', 4 => '0', 'se' => '0', 5 => '5', 'setil' => '5', 6 => '1', 'hvor' => '1', 7 => '0', 'andet' => '0', 8 => '0', 'over' => '0', 9 => '', 'tab' => '', 10 => '', 'tab_tekst' => '', )
Avatar billede Slettet bruger
30. september 2004 - 15:51 #61
fennec ved din får jeg:

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 '' at line 1
SQL:SELECT * FROM
Avatar billede bromer Nybegynder
30. september 2004 - 15:51 #62
yep.. som du kan se indeholder 'tab' ikke noget.. Derfor virker din query ikke.
Avatar billede Slettet bruger
30. september 2004 - 15:52 #63
Er der en der kender en lidt nemmere måde at lave det her breadcrumbs system på?

Hjemmesiden skal være så dynamisk som muligt, og jeg ved ikke omd er findes bedre metoder?
Avatar billede bromer Nybegynder
30. september 2004 - 15:52 #64
mere specifikt ineholder den række i menu du vælger ikke noget i tab feltet. Derfor får du fejl i din query. Ellers er den query jeg skrev sidst (faktisk de sidste par gange) korrekt nok.
Avatar billede Slettet bruger
30. september 2004 - 15:54 #65
men idet at jeg siger:

if($row[tekst] != 0)
                {
                // gem det sidste hentede data før det der allerede er
              $this->krumme = "<a href=\"index.php?pid=". $row[id] ."\">". $row[tekst] ."</a>". $this->krumme;
                }
            elseif($row[tekst] == 0)
                {
                unset($bet);
                if($_GET[id] > 0)
                    {
                    $bet = "WHERE id=". $_GET[id] ."";
                    }
                $que = mysql_query($sql=sprintf("SELECT * FROM %s %s",$row["tab"],$bet)) or die(mysql_error() . '<br />SQL:' . $sql);
                $ro = mysql_fetch_array($que);
                $id = $ro[id];
                $tekst = $ro[$row[tab_tekst]];
                $this->krumme = "<a href=\"index.php?pid=". $row[id] ."&id=". $id ."\">". $tekst ."</a>". $this->krumme;
                }
            // er der en ovenliggende side

så er $row[tekst] jo ikke lig med nul der hvor $row[tab] ikke er sat
Avatar billede Slettet bruger
30. september 2004 - 15:56 #66
ikke?
Avatar billede bromer Nybegynder
30. september 2004 - 15:56 #67
og hvad så.. du bruger jo ikke $row[tekst] til noget i din query
Avatar billede Slettet bruger
30. september 2004 - 15:57 #68
nej, men hvis $row[tekst] er lig nul, så skal den jo ikke køre querien overhovedet..
Avatar billede bromer Nybegynder
30. september 2004 - 15:58 #69
og. du kan se fra var_export at $row[tekst] er lig "forsiden".. men $row[tab] er stadig tom...
Avatar billede Slettet bruger
30. september 2004 - 15:59 #70
men når $row[tekst] er lig "forsiden", så skal querien jo slet ikke køres
Avatar billede bromer Nybegynder
30. september 2004 - 16:02 #71
ahh... men det bliver den jo alligevel.. så testen $row[tekst] == 0 bliver sand.. hvad med $row["tekst"] == 0
Avatar billede Slettet bruger
30. september 2004 - 16:05 #72
if($row["tekst"] == 0)
                {
                unset($bet);
                if($_GET[id] > 0)
                    {
                    $bet = "WHERE id=". $_GET[id] ."";
                    }
                $que = mysql_query($sql=sprintf("SELECT * FROM %s %s",$row["tab"],$bet)) or die(mysql_error() . '<br />SQL:' . $sql);
                $ro = mysql_fetch_array($que);
                $id = $ro[id];
                $tekst = $ro[$row[tab_tekst]];
                $this->krumme = "<a href=\"index.php?pid=". $row[id] ."&id=". $id ."\">". $tekst ."</a>". $this->krumme;
                }
            else
                {
            // gem det sidste hentede data før det der allerede er
              $this->krumme = "<a href=\"index.php?pid=". $row[id] ."\">". $row[tekst] ."</a>". $this->krumme;
                }

stadig fejl :(
Avatar billede bromer Nybegynder
30. september 2004 - 16:09 #73
okay... måske bliver det castet til 0.. virker dog underligt.. prøv at skrive

if (strlen($row['tekst']) == 0) istedet for if($row["tekst"] == 0)
Avatar billede Slettet bruger
30. september 2004 - 16:11 #74
Det kunne godt se ud til at virke :P
Avatar billede bromer Nybegynder
30. september 2004 - 16:13 #75
fedt... det tog kun 800000 indlæg :)
Avatar billede Slettet bruger
30. september 2004 - 16:14 #76
:P

jeg prøver lige selv at fikse lidt med det, der er stadig lidt weird stuff.. men tak for hjælpen :P
Avatar billede Slettet bruger
30. september 2004 - 16:16 #77
i stedet for: if (strlen($row['tekst']) == 0)

så: if (strlen($row['tekst']) == 1)

for der står jo 0 i feltet
Avatar billede Slettet bruger
30. september 2004 - 16:28 #78
men jeg vil smutte nu - endnu en gang tak for hjælpen :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester