Nem jól dönti el SQL-ben a nevet miért?
hiba nincs de ha olyat írok ami nincs is az is jó miért?
Itt a kod:
<?php
$mysqli = new mysqli('localhost', 'root', 'asd' , 'test');
if ($mysqli->connect_error) {
echo "Fail:".$mysqli->connect_error;
}
$name = $_GET["name"];
if ($result = $mysqli->query("SELECT name, email FROM test_mysql WHERE name = ('$name')")) {
echo "ÜDV ".$name;
}
else{
echo $name." NINCS engedélyed.";
}
$mysqli->close();
?>
A mysqli::query SELECT esetén egy mysqli_result objektumot ad vissza, így az if mindig igaz lesz (kivéve, ha valami hiba történt)
Tehát ha 0 ilyen sort talál, akkor is ez az objektum jön vissza.
Nézd meg a dokumentációt:
Egyébként nem kéne ellenprizetlenül a paraméterben kapott nevet hozzáfűzni az SQL lekérdezéshez, nézz utánna, hogy mi az az SQL injection.
Régen MySQLi-ztem, tehát ezt úgy fejből valami.
Tehát ő lesz a kapott, ahogy mondja az 1. válaszoló.
Tehát, ha ebből hívod a fetch_assoc() metódust, akkor egy 2 dimenziójú tömböt kapsz a kapott táblával.
$result = $mysqli->query(...)
$array = $result->fetch_assoc();
echo $array[<sorId>][<oszlopneve>];
Pl.:
$result = $mysqli->query("SELECT alma, korte FROM noveny") // mondjuk 5 sort talált
$array = $result->fetch_assoc();
echo $array[0]["alma"], " ", $array[0]["korte"];
echo $array[1]["alma"], " ", $array[1]["korte"];
echo $array[2]["alma"], " ", $array[2]["korte"];
echo $array[3]["alma"], " ", $array[3]["korte"];
echo $array[4]["alma"], " ", $array[4]["korte"];
Persze ezt foreach-elheted és így tovább...
Én login systemet próbálok csinálni csak WHERE name = ('$name') nél mindig jó de miért valaki nem tudná a kodomba írni
elöre is köszönöm
#3, a fetch_assoc() csak egy sort (a következőt) adja vissza a result setből, nem az egész setet. A fetch_all működik úgy, ahogy írod. (Persze az is csak akkor, ha megfelelően paraméterezed.)
Kérdező:
Leírták már, mi a gond. Mit vársz? Helyetted írják meg az egészet? Akkor már miért nem keresel egy kész megoldást?
Egyébként még egyszer:
$result = $mysqli->query("SELECT name, email FROM test_mysql WHERE name = ('$name')");
Itt escape-elni kell a $name értékét. A fent említett SQL injectionnek nézz utána! (Házi feladat...)
Ha ez megvan, akkor két esetben van probléma:
1. a $result értéke FALSE
Ez akkor van, ha valamilyen hiba van a SELECT-ben (SQL hiba, nem létezik a tábla, mező, stb.).
2. SQL tekintetében rendben van, de nincs olyan nevű rekord a táblában
Ebben az esetben a $result értéke NEM FALSE, hanem egy mysqli_result objektum. Ezt meg kell vizsgálni:
Például lekérdezed a talált rekordok számát: $result->num_rows
Ha ez 0, akkor nincs olyan felhasználó, különben van.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!