Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL kyselyssä virhe?

Paulus M [21.10.2009 15:39:55]

#

Yritän tarkistaa taulukosta table, että onko usernamea olemassa.
Tule virhe ilmoitus:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /plaa...plaa/Functions/login.inc.php on line 140

Mistä tälläinen virheilmoitus voisi johtua?
Jos usernamea ei löydy, niin eihän pitäisi tulla tällaista virheilmoitusta?
Entäs jos ei ole olemassa tuollaista taulua `${config_table}_sites` niin mitä sitten tapahtuu?

$userfound = false;
$doit = "SELECT table FROM `${config_table}_sites`";
$res = mysql_query($doit,$c);
while(($rows = mysql_fetch_array($res)) != FALSE)
{
	if($rows->table == $username)
	{
		$userfound = true;
		break;
	}
}

Metabolix [21.10.2009 15:42:36]

#

Opettele nyt ne debuggauksen alkeet.

<?php
if (!$res) {
  die("Virhe kyselyssä: ".htmlspecialchars(mysql_error()));
}

Lisäksi voisit opetella SQL:n ja PHP:n alkeet. Funktio mysql_fetch_array palauttaa taulukoita eikä olioita, ja "SELECT table" ei ole missään tapauksessa validia SQL:ää.

Macro [21.10.2009 15:43:28]

#

Minä tekisin sen näin:

<?php
$kysely = mysql_query("SELECT tunnus FROM kayttajat WHERE tunnus = '$username'");
if(mysql_num_rows($kysely) != 0) {
	$userfound = true;
}

Turha niitä kaikkia käyttäjiä on hakea, kun tiedetään jo mitä haetaan.

tsuriga [21.10.2009 15:47:52]

#

Ja turha hakea semmoisia tietoja, joita ei käytetä. Tässä riittää SELECT 1 FROM...

EDIT: Jos nyt verrataan vaikkapa SELECT * FROM -tilanteeseen. Toki yksi kenttä tuskin enää tuntuu missään, mutta mitäpä silläkään.

Paulus M [21.10.2009 16:05:25]

#

Ok, kiitoksia vastauksista, tuossa mun SQL rakenteessa table pitäisi olla yhden taulunnimi, eikä avainsana, mutta en oo vielä päässyt varmuuteen asiasta, koska en ole saanut näkyviin taulukoiden nimiä.

EDIT: no nyt pääsin varmuteen ja tosiaan se on taulun nimi, eli table.
EDIT 2: Hei muuten, virhe ilmoitus esiintyy vieläkin(vaikka tein niin kuin neuvottiin), niin voisiko
johtua siitä, että "table" on myös SQL kielen avainsana. Jos näin, niin pitäisikö viittaukset tähän taulukkoon "table" tehdä jollain erityisellä tavalla? En itse voi enää muuttaa tuon taulukon nimeä ja joku on ei ole oikeen miettinyt, että miksi laittaa moisen nimen. Tsekkasin, niin table on SQL kielen avainsana.

Sori kun joudun kysellä näin paljon, oon joskus yliopistossa tehnyt vaikeitakin SQL kyselyharjoituksia, mutta meinaa unohtua. Nyt mulla on projekti, jolla on kiire ja kun en meinaa keksiä millään virhettä, niin on pakko kysyä apua.

Blaze [21.10.2009 17:54:50]

#

SELECT blah FROM `table` toimii ainakin MySQL:ssä.

Paulus M [22.10.2009 17:34:37]

#

Joo, sain sen toimimaan, mutta tein sillain että pistin $muuttuja = "table" ja lisäsin tuon muuttujan kyselyyn niin se tulkitsi sen table tauluksi.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta