Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Virhe: not a valid MySQL result resource

Sivun loppuun

jessenic [19.05.2010 20:02:15]

#

Mikäs on vikana, kun yritän seuraavaa:
ORDER BY `lastonline`, `update` ASC
Tulee vaan virhe-ilmoituksia?

Eli supplied argument is not a valid MySQL result resource

Mod. siirsi aiheen MySQL ja PHP -oppaan kommenteista!

mavavilj [21.06.2024 17:25:58]

#

jessenic kirjoitti:

Mikäs on vikana, kun yritän seuraavaa:
ORDER BY `lastonline`, `update` ASC
Tulee vaan virhe-ilmoituksia?

Eli supplied argument is not a valid MySQL result resource

No jos vaikka kertoisit ensin, mikä `lastonline` on ja mikä `update` on?

ORDER BY vaatii puolipisteen ; lauseen loppuun, koska sen tulee olla jonkin queryn osana:

SELECT
   column1, column2...columnN
FROM
   table_name
ORDER BY
   expression [ASC|DESC];

Metabolix [21.06.2024 20:03:34]

#

Kuten ystävä Google kertoo, "supplied argument is not a valid MySQL result resource" aiheutuu tyypillisesti siitä, että kyselyssä on virhe, mysql_query (jota ei muuten enää ole PHP:n nykyisissä versioissa) palauttaa tämän takia arvon false eikä MySQL-resurssia, ja sitten myöhemmässä kohdassa tulosten hakeminen tästä false-arvosta ei onnistu.

Yksi mahdollinen syy ongelmaan on se, että jos tosiaan on yritetty laittaa vain ORDER BY, tämä ei yksistään ole kokonainen SQL-lause. Jos kyselyssä on muitakin osia, mahdollisesti osat ovat väärässä järjestyksessä tai kyselyssä on jokin muu vika.

Voisi sanoa myös, että ”vikana” on puuttuva virheiden tarkastaminen. Proseduraalista rajapintaa käyttäessä pitäisi tarkastaa kyselyn onnistuminen:

$result = mysql_query("SELECT * FROM taulu ORDER BY x, y ASC");
if (!$result) {
  // TODO: Tallenna virhe lokiin.
  throw new Exception("Tietokantavirhe: " . mysql_error());
}

mavavilj kirjoitti:

mikä `lastonline` on ja mikä `update` on?

Melko epäolennaista ongelman kannalta. Varmasti voimme olettaa, että ne ovat MySQL-taulun kenttiä.

mavavilj kirjoitti:

ORDER BY vaatii puolipisteen

Ei se vaadi yhtään enempää puolipistettä kuin muutkaan. Puolipisteen tarve MySQL:ssä riippuu siitä, ajaako lauseita yksittäin tulkissa (jolloin puolipiste lopettaa lauseen) vai jollain ohjelmointikielellä (jolloin yleensä lause loppuu luontevasti merkkijonon loppuessa ihan ilmankin puolipistettä).

Sitten mavavilj voisit myös katsoa, montako (kymmentä) vuotta vanhaan viestiin vastaat jossain oppaiden kommenteissa. Esimerkiksi yli 1 vuosi on jo selkeästi raja, että kysyjä tuskin tulee enää jatkamaan keskustelua.

mavavilj [23.06.2024 09:02:06]

#

On mahdollista, että `lastonline` tai `update` eivät ole olemassa.

Puolipisteen puuttuminen kertoo aika paljon siitä, että kyseessä ei ole query. Sitä voisi käyttää myös, jotta kyselyt toimivat kaikkialla standardinmukaisesti.

(Joku muu voi löytää kysymyksen)

Sitten voisi moderaattori kanssa poistaa vastaamattomat viestit, jos ne ovat irrelevantteja.

Metabolix [23.06.2024 13:16:32]

#

mavavilj kirjoitti:

On mahdollista, että `lastonline` tai `update` eivät ole olemassa.

Yleisen elämänkokemuksen perusteella se on mahdollisista virheistä huomattavasti epätodennäköisempi kuin muuten syntaksiltaan virheellinen kysely.

mavavilj kirjoitti:

Puolipisteen puuttuminen kertoo aika paljon siitä, että kyseessä ei ole query.

Kun SQL-kyselyitä kirjoitetaan muun koodin sekaan (esim. PHP:ssä), yleensä ei ole tapana käyttää puolipistettä eikä sen käyttämisestä ole mitään hyötyä.

mavavilj kirjoitti:

(Joku muu voi löytää kysymyksen)

Totta, jos joku vaikka harrastaa uuden softan koodaamista 15 vuotta vanhalla PHP:n versiolla ja törmää tähän virheilmoitukseen, jota ei voi enää nykyisillä versioilla tulla.

mavavilj [23.06.2024 13:30:11]

#

Entä jos samoja kyselyitä käytetään eri ympäristöissä?

Metabolix [24.06.2024 00:05:36]

#

mavavilj kirjoitti:

Entä jos samoja kyselyitä käytetään eri ympäristöissä?

Voitko antaa jonkin esimerkin, missä näin tehtäisiin ja miksi? Mihin kyselyt olisi tallennettu ja miten ne sieltä haettaisiin, jotta todella sama kysely päättyisi eri ympäristöihin (eikä vain käsin kopioitu kysely, jossa puolipiste on pienimpiä muutostarpeita)? Millä tavalla puolipisteen lisääminen valmiiksi helpottaisi keksimääsi skenaariota? Pitäisikö johonkin silloin ohjelmoida tarkastus, ettei voi vahingossa tallentaa kyselyä ilman puolipistettä ja aiheuttaa bugia osassa ympäristöistä? Eikö samalla tai pienemmällä vaivalla voisi yksinkertaisesti lisätä ohjelmallisesti puolipisteen, jos tarvitsee?

Luultavasti jo tässä vaiheessa asian miettiminen on vienyt enemmän aikaa kuin koko elämän SQL-kyselyiden puolipisteiden lisäys tarvittaessa käsin. Ylipäänsä SQL:n kirjoittaminen käsin on nykyään harvinaisempaa kuin 2010, kun on kaikenlaisia frameworkkeja.

mavavilj [24.06.2024 02:57:15]

#

Jokin automatisoitu hakuohjelma, jossa ihminen tekee komennot SQL:llä ja joka käännetään koneellisesti upotetuksi SQL:ksi, koska on useita frontend:jä. Esim. eri valmistajilta tai eri kielillä.

muuskanuikku [25.06.2024 05:55:03]

#

mavavilj kirjoitti:

Jokin automatisoitu hakuohjelma, jossa ihminen tekee komennot SQL:llä ja joka käännetään koneellisesti upotetuksi SQL:ksi, koska on useita frontend:jä. Esim. eri valmistajilta tai eri kielillä.

Anna käytännön esimerkki. Älä keksi päästäsi täysin idioottimaisia skenaarioita, kun tuskin edes itse ymmärrät tuon sanaripulin merkitystä. Kirjoita koodi siitä asiasta, mitä yrität sanallisesti kuvailla.

mavavilj [25.06.2024 18:58:57]

#

No vaikka jos haluat ylläpitää samanaikaisesti PHP ja C++ codebasea ym. ja et halua kirjoittaa käsin uusia SQL-komentoja, kun laajennat järjestelmää.

Tai teet SQL:ää hyödyntävän systeemin vaikka 8th:illa tai Haxe:lla. Mutta testaat ja devaat SQL:llä.

Metabolix [25.06.2024 20:41:45]

#

Aivan huikea käyttötapaus. Kumma, kun ei tullut itselle mieleen.

Eiköhän suosiolla lopeteta keskustelu, ennen kuin lähtee taas lapasesta. Varsinaiseen virheilmoitukseen on jo näillä lähtötiedoilla relevantit kommentit annettu.


Sivun alkuun

Vastaus

Aihe on lukittu, joten siihen ei voi vastata.

Tietoa sivustosta