ugrás a tartalomhoz

Warning minden mysql parancsra query után

daniel takacs · 2005. Okt. 5. (Sze), 21.20
régi ismerősöm, szeretném bemutatni:

Warning: mysql_num_rows(): supplied argument is not valid MySQL result resource in C:\...\create.php on line 9.

a line 9 pedig a már korábban is emlegetett mysql-lekérdezés második tagja, csak éppen nem mysql_fetch_object(), hanem mysql_num_rows(). nem mellesleg hozzáfűzném, hogy egy mysql_query() lekérdezés után az eredményt tartalmazó változóval végzett műveletek ezzel a hibaüzenettel végződnek. mindig.

kérdés: milyen lépéssel lehet megelőzni ezt az üzenetet? van vhonnan egy dokumentáció mellékleteként egy példa, amiben ugyanigy van leirva a parancs, de arról már nem beszél, hogy ez csak egy Warning erejéig jó.
 
1

nem jó a lekérdezés

Hojtsy Gábor · 2005. Okt. 5. (Sze), 21.46
Ilyen hiba akkor fordul elő, ha nem jó valami a lekérdezésben. El lehet kerülni. Ha a mysql_query() visszatérési értéke nem TRUE-nak tekinthető, akkor van gáz, és a mysql_error() függvény elárjulja neked a hiba természetét. Ilyenkor nem szabad továbbmenni a későbbi SQL eredmény feldolgozásra, mert nincs mit feldolgozni.

<?php
// Direkt van egy egyenlőség jel, értéket adunk a $result-nak,
// és megnézzük, hogy jó-e az érték, ha nem jó, akkor gond van
if (!($result = mysql_query("...."))) {
  // itt kezeld le a hibát, ahogy gondolod, például
  die("SQL hiba: " . mysql_error());
  // ehelyett persze szebb kell egy éles webhelyen, például
  // error_log() és exit() egymás után.
}
?>
2

Hibás query

Poetro · 2005. Okt. 5. (Sze), 22.53
Már maga a lekérdezés hibás volt szintaktikailag, vagy nem kapcsolódtál korábban a mysql adatbázishoz.
Az hogy hibás volot a lekérdezés azt jelenti, hogy nem felel meg a mysql specifikációnak. Ha nem tudod pontosan mi is volt a lekérdezés, vagy abban hol lehet a hiba, próbáld kiiratni, mit is adsz meg a mysql_query-nek paraméterként, és azt bemásolva egy MySQL parancssorba meglátod, hogy hol is lesz abban a hiba.
--------
Poetro
3

mi lehet a hiba? formailag elvileg jó...

daniel takacs · 2005. Okt. 6. (Cs), 10.07
az egyértelműség kedvéért idemásolom a pontos kódot:
$ellen = mysql_query ( "SELECT $m FROM szotar" ); <-- eddig működik, azt tudom...
$e = mysql_num_rows ( $ellen );

az '$m' egy űrlapba bevitt szó, amit a 'szotar'-ban lekérdezek.
ha más műveletet végzek (hozzáírás stb.), sőt még a lekérdezés eredményének a kilistázása is működik (nem emlékszem, pontosan milyen paranccsal, ha hozzájutok, azt is iderakom).
és a connect is megvolt, azzal kezdődik az egész...
4

az SQL lekerdezes a hibas

Barkóczi Roland · 2005. Okt. 6. (Cs), 15.02
helyesen igy ird meg a lekerdezesedet:

<?php
$ellenoriz = mysql_query ("SELECT * FROM szotar where szo = '".$m."'");
$sorok_szama = mysql_num_rows($ellenoriz);
if (!$sorok_szama)//ha az elozo lekerdezes nem adott vissza egy sort sem, azaz, a szotar-ban nem volt egy olyan sor sem, ahol szo = $m, akkor be lehet szurni az adatbzisba a szot
{
  //...adatbazisba iras...
}
Egyebkent tenyleg az a legjobb, ha a mysql_query-t hibadetektalassal egyutt futtatod, s akkor megmondja az SQL szerver, hogy mi a gondja a lekerdezessel:

<?php
$p = "SELECT * FROM szotar where szo = '".$m."'"; //kulon stringbe rakjuk a lekerdezest
$e = mysql_query ($p) or die(mysql_error()."<br/><br/>".$p);
// az $e valtozo a visszaadott mysql resource, vagy alljon le a prgram, ha hibas a lekerdezes, irja ki a hibauzenetet, es a hibadetektalas erdekeben irja ki a teljes lekerdezest
5

<Nincs cím>

daniel takacs · 2005. Okt. 6. (Cs), 20.46
nem is tudom, hogy köszönjem meg nektek... a "\" jel is segitett, meg ez a konkrét hibakezelés is. köszi!

dani