Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL: Order By -ongelma

Sivun loppuun

mika132 [28.02.2010 01:38:58]

#

Eli mysql_error() tulostaa seuraavaa:
Error on server (127/192)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 'ORDER BY Omistajan_ID DESC' at line 1

Ja koodi on:

<?php
	$kuskinidnot=$kuskinID[$i];
	$autoIDnot=$AutoID[$i];
	$query303 = "SELECT Hevosvoimat, Auton_ID, Omistajan_ID, Auton_moottori_kunto, Auton_vaihdelaatikko_kunto, Auton_kaasari_kunto, Renkaiden_kunto, Renkaiden_pito, Alustan_taso, Paino, Valit, Jousitus, LisaPaino, AutonKorkeus, JoustenKovuus FROM Jokkis_manager_autot WHERE Auton_ID = $autoIDnot ORDER BY Omistajan_ID DESC";


	$result303 = mysql_query($query303, $connection) or die('Error on server (127/192)'.mysql_error().'');

	$tulos6 = array();

	while ($table = mysql_fetch_array($result301, MYSQL_ASSOC))
	{

		$tulos6[] = $table;

	}

	foreach ($tulos6 as $f)
	{
		$hevosvoimatID[$i] = $f["Hevosvoimat"];
		$MoottoriKuntoID[$i] = $f["Auton_moottori_kunto"];
		$VaihdelaatikkoKuntoID[$i] = $f["Auton_vaihdelaatikko_kunto"];
		$KaasariKuntoID[$i] = $f["Auton_kaasari_kunto"];
		$RenkaidenKuntoID[$i] = $f["Renkaiden_kunto"];
		$RenkaidenPitoID[$i] = $f["Renkaiden_pito"];
		$AlustanTasoID[$i] = $f["Alustan_taso"];
		$PainoID[$i] = $f["Paino"];
		$ValitID[$i] = $f["Valit"];
		$JousitusID[$i] = $f["Jousitus"];
		$LisaPainoID[$i] = $f["LisaPaino"];
		$AutonKorkeusID[$i] = $f["AutonKorkeus"];
		$JoustenKovuusID[$i] = $f["JoustenKovuus"];
	}
	if ($moneskokuski == $i)
	{
		$next=3;
	}
?>

Eli missä vika, koska itse en näe mitään ongelmaa tuossa, mutta ehkä olen vain huolimaton.

temu92 [28.02.2010 02:12:21]

#

Tarkista että $autoIDnot muuttujasta tulee varmasti halutunnäköinen arvo. Ja imo kannattas käyttää vaan all-lowercase nimiä noissa, helpommin tulee virheitä jos on tuolla tavalla.

Tuo virheilmoituskin kertoo sen, että vika on _lähellä_ ilmoitettua aluetta, ei välttämättä siinä alueella.

Grez [28.02.2010 02:14:04]

#

Koska $AutoID taulukkoa ei ole missään määritelty niin myös $autoIDnot jää tyhjäksi ja SQL-kyselystä tulee "... WHERE Auton_ID = ORDER BY ..." joka luonnollisesti antaa virheen.

mika132 [28.02.2010 02:26:42]

#

Juu ei tulosta tuonne mitään, ja nyt en keksi muutakaan kuin heittää tuo koko koodi tuonne jos vaikka näkisitte missä vika. Kaikki muuttujat on mielestäni alustettu:


Ja tämä ei tulosta mitään mitä tuossa if next 3 jälkeen on, joten jossain on vikaa.

<?php
//En laittanut mukaan Tietokantaan yhteyksien ottoa yms vaan tämän kilpailu engine kohdan.
$moneskokuski=0;

$lahto=0;
$sija=0;

$query301 = "SELECT Osallistujan_ID, Kisan_Data, Numero, Data FROM Jokkis_manager_osallistujat WHERE Osallistujan_ID > 0 and Kisan_Data = 10 ORDER BY Osallistujan_ID DESC";


$result301 = mysql_query($query301, $connection);

$tulos6 = array();

while ($table = mysql_fetch_array($result301, MYSQL_ASSOC))
{

	$tulos6[] = $table;

}

foreach ($tulos6 as $f)
{
	$kuskinID[$moneskokuski] = $f["Osallistujan_ID"];
	$moneskokuski+=1;
}



for ($i=0; $i <= $moneskokuski; $i++)
{
	$kuskinidnot=$kuskinID[$i];
	$query302 = "SELECT Kayttaja, ID, Ajotaito, Pisteet FROM Jokkis_manager WHERE ID = $kuskinidnot ORDER BY ID DESC";


	$result302 = mysql_query($query302, $connection);

	$tulos7 = array();

	while ($table = mysql_fetch_array($result301, MYSQL_ASSOC))
	{

		$tulos7[] = $table;

	}
	foreach ($tulos7 as $f)
	{
		$ajotaitoID[$i]=$f["Ajotaito"];
		$KuskiNimiID[$i]=$f["Kayttaja"];
		$AutoID[$i]=$f["Kaytossa_auto_ID"];
	}
	if ($moneskokuski == $i)
	{
		$next=2;
	}
}
if ($next == 2)
{
for ($i=0; $i <= $moneskokuski; $i++)
{
	$kuskinidnot=$kuskinID[$i];
	$autoIDnot=$AutoID[$i];
	echo "<br><hr>$autoIDnot<hr><br>";
	$query303 = "SELECT Hevosvoimat, Auton_ID, Omistajan_ID, Auton_moottori_kunto, Auton_vaihdelaatikko_kunto, Auton_kaasari_kunto, Renkaiden_kunto, Renkaiden_pito, Alustan_taso, Paino, Valit, Jousitus, LisaPaino, AutonKorkeus, JoustenKovuus FROM Jokkis_manager_autot WHERE Auton_ID = $autoIDnot ORDER BY Omistajan_ID DESC";


	$result303 = mysql_query($query303, $connection) or die('Error on server (127/192)'.mysql_error().'');

	$tulos6 = array();

	while ($table = mysql_fetch_array($result301, MYSQL_ASSOC))
	{

		$tulos6[] = $table;

	}

	foreach ($tulos6 as $f)
	{
		$hevosvoimatID[$i] = $f["Hevosvoimat"];
		$MoottoriKuntoID[$i] = $f["Auton_moottori_kunto"];
		$VaihdelaatikkoKuntoID[$i] = $f["Auton_vaihdelaatikko_kunto"];
		$KaasariKuntoID[$i] = $f["Auton_kaasari_kunto"];
		$RenkaidenKuntoID[$i] = $f["Renkaiden_kunto"];
		$RenkaidenPitoID[$i] = $f["Renkaiden_pito"];
		$AlustanTasoID[$i] = $f["Alustan_taso"];
		$PainoID[$i] = $f["Paino"];
		$ValitID[$i] = $f["Valit"];
		$JousitusID[$i] = $f["Jousitus"];
		$LisaPainoID[$i] = $f["LisaPaino"];
		$AutonKorkeusID[$i] = $f["AutonKorkeus"];
		$JoustenKovuusID[$i] = $f["JoustenKovuus"];
	}
	if ($moneskokuski == $i)
	{
		$next=3;
	}
}
}
if ($next == 3)
{
for ($i=0; $i <= 8; $i++)
{
echo "$KuskiNimiID[$i]<br> $AutoID[$i]<br> $hevosvoimatID[$i]<br> $MoottoriKuntoID[$i]<br> $VaihdelaatikkoKuntoID[$i]<br><br>";
}
?>

Grez [28.02.2010 02:38:16]

#

Mahdollisesti tuosta löytyisi vika helpostikin ihan normaaleilla debuggauskeinoilla, mutta se ei tietenkään ole mahdollista ilman tietokantayhteyttä, ja muutenkin tulee mieleen että tietokannan sisältö saattaa vaikuttaa toimivuuteen.

Sinuna laittaisin vaan breaklinen tuohon alkuun ja ajelisin sitä rivi kerrallaan eteenpäin katsoen mitä tapahtuu ja jossain kohti siinä varmastikin tulee "face palm" efekti. Noiden skriptien debuggaus on lopulta aika helppoa.

tesmu [28.02.2010 03:00:27]

#

Yksi kysymys

$query303 = "SELECT Hevosvoimat, Auton_ID, Omistajan_ID, Auton_moottori_kunto, Auton_vaihdelaatikko_kunto, Auton_kaasari_kunto, Renkaiden_kunto, Renkaiden_pito, Alustan_taso, Paino, Valit, Jousitus, LisaPaino, AutonKorkeus, JoustenKovuus FROM Jokkis_manager_autot WHERE Auton_ID = $autoIDnot ORDER BY Omistajan_ID DESC";

Onko tarkoituksena valita kaikki sarakkeet taulusta?


Voit tehdä sen myös SELECT * FROM Jokkis_manager_autot WHERE Auton_ID = $autoIDnot ORDER BY Omistajan_ID DESC;

Chiman [28.02.2010 08:48:48]

#

Vika löytyy seuraamalla jo mainitusta ongelmakohdasta taaksepäin ja katsomalla missä menee ensimmäisen kerran pieleen. Voit tulostaa muuttujien arvoja ja katsoa ovatko ne mitä pitää.

Tilanteessasi ongelmana oli, että $autoIDnot ei sisältänyt mitään. Seurataanpa siitä ylöspäin, ratkaisevat kohdat:

$autoIDnot=$AutoID[$i];
->
$AutoID[$i]=$f["Kaytossa_auto_ID"];
->
foreach ($tulos7 as $f)
->
$tulos7[] = $table;
->
while ($table = mysql_fetch_array($result301, MYSQL_ASSOC))
->
$result301 = mysql_query($query301, $connection);
->
$query301 = "SELECT Osallistujan_ID, Kisan_Data, Numero, Data FROM Jokkis_manager_osallistujat WHERE Osallistujan_ID > 0 and Kisan_Data = 10 ORDER BY Osallistujan_ID DESC";

Eli monen välivaiheen kautta yrität saada $query301:n tuloksen riveiltä kenttää "Kaytossa_auto_ID", jota kyselyssä ei kuitenkaan määritellä. Muuttujien sisältöjä voit tulostaa funktiolla var_dump.

Lebe80 [28.02.2010 12:49:55]

#

tesmu: eikös ekana mysql:ssä opeteta juuri, ettei SELECT * ole kauhean optimaalinen haku.

ja jos jokin ei toimi, niin debuggia kehiin, eli queryn tulostus ruudulle, jolloin näkee heti, millä arvoilla hakua tehdään. Eli onko jostain kumman syystä tyhjiä muuttujia eksynyt joukkoon.

Metabolix [28.02.2010 12:51:01]

#

Laita jokaisen skriptin alkuun seuraavat rivit:

<?php
ini_set("display_errors", 1);
ini_set("error_reporting", E_ALL | E_STRICT);

Näin saat suuren määrän lisää varoituksia ja huomautuksia mahdollisista ongelmista ja huonoista ohjelmointitavoista. Niiden ansiosta saat ehkäistyä typeriä virheitä ennalta.

(Jos yllä mainitut rivit aiheuttavat varoituksen aikavyöhykkeestä, voit asettaa sen rivillä date_default_timezone_set("Europe/Helsinki").)

vehkis91 [28.02.2010 20:16:43]

#

Mikä tän putkan ulkoasua taas vaivaa, ku menee noi tekstit yli tosta ns "keskiboxisTA", eli menee tonne sivupalkin puolelle.

Ongelma siis tässä keskustelussa.

Selain: Safari 4
OS: Win 7 64bit Ultimate
Reso: 1920x1080


Ongelma siis esiintyy, kun pienennän ikkunan koon, puoleen näytön koosta.

Blaze [28.02.2010 21:00:51]

#

vehkis91 kirjoitti:

Mikä tän putkan ulkoasua taas vaivaa

Tunnettu ongelma sillon ku joku kirjottaa liian pitkiä rivejä kooditagien sisään.
(Mod. korjasi.)

vehkis91 [28.02.2010 22:15:24]

#

Okei, nyt näyttäis pelaavan.


Sivun alkuun

Vastaus

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

Tietoa sivustosta