Mit rontok el ebben a mysql lekérdezésben?
itt a link:
Ez csak az inkriminált kódrészlet, a kapcsolódás sikeres volt az adatbázishoz, azt csekkoltam. Hibaüzenet:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\access.php on line 19
Hibás lekérdezés: No database selected
Ha simán mysql-ben kérdezem le ugyanezt, úgy működik a dolog. (php myadminban)
Tehát ez megy, létezik a tábla és a sor is:
SELECT password FROM account WHERE username=akarmi
Mi az Isten baja lehet? Kerestem százezer féle leírást, de nekem valahogy egyik se jött még be, pedig egy egyszerű where lekérdezésről van szó.
Tudom, hogy béna vagyok, de még csak tegnap kezdtem tanulni a mysql-t. :D
Ezt nem teljesen értem, ez nem az adatbázis kiválasztása?
$result = mysql_query("SELECT password FROM account WHERE username=akarmi");
$row = mysql_fetch_array($result);
Ha nem, akkor ez micsoda? Mármint a SELECT szó...
Itt van egy tutorial a select-hez:
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
Az sql változóba bevezeti az id a firstname és a lastname sort a MyGueasts táblából, és a változóba pedig a $conn változó szerint (ami a bejelentkezési adatokat tartalmazza, felhnév, jelszó db-name, servername) készít egy lekérdezést az sql változóról. Nekem ez megvan. A tábla létezik, a sor létezik, amit WHERE-el akarok lekérdezni, mégis azt írja, hogy nem választottam ki az adatbázist.
Na ennek a megoldása érdekel engem. Miért csinálja ezt, mi a probléma? A példában látható asszociatív tömbös, while ciklusos megoldás működik, de nekem egyetlen egy sor adataira van szükségem, azt meg csak a WHERE-el tudom megoldani.
"A from után a táblanevet adod meg, de a sémát még nem választottál. vagy ugy kell, hogy from sémaneve.táblaneve, vagy ahogy az előttem mondták, alapértelmezetté kell tenni egy sémát."
Mi az a séma? Most hallok róla először.
Van az adatbázisod. Ez sémákból áll. A sémák táblákból. A táblák pedig mezőkből.
Alapértelmezett sémát USE -val lehet választani. [link]
Jó, lehet hogy mysql terminológiában a séma az az adatbázis, de általánosan sémának hívják. Pl postgresql-ben és mssql-ben is schema van.
Itt egy példa, így
Ezt is lemásoltam már, ugyanaz a hibaüzenet, csak kétszer.
Még mindig nem értem, hogy miért nem választottam sémát. Csatlakoztam az access nevű adatbázisomhoz, vagy sémámhoz, tökmindegy. Mindemellett az előző példa szerint select-eltem az táblám megfelelő sorait. Ez nem a teljes kód, amit beírtam a codepen-be.
Az összes adat kiírása pedig működik, csak a WHERE nem. Valami más gebasz lesz, nem az, hogy nem csatlakoztam a sémához, de csatlakoztam hozzá.
<?php
Itt határozom meg az adatbázisomhoz való csatlakozást, a dbname-el a sémához, való csatlakozást.
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
Itt kapcsolódom az előzőleg deklarált változók szerint.
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
Itt csekkolom, hogy megy e a kapcsolat, ha ne, akkor hibaüzenetet írok ki.
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
itt választom ki az adatbázist, vagy sémát, vagy anyám kínját
Az id az id sor a firstname a firstname sor a lastname... a myguest pedig a tábla
$sql = "SELECT id, firstname, lastname FROM MyGuests";
Itt készítek lekérdezést az $conn-ban meghatározott kapcsolat segítségével.
$result = $conn->query($sql);
Ez működik.
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
Ha ugyanezt leírom, hogy:
$sql = "SELECT id, firstname, lastname FROM MyGuests";
de ez where-el van, és nyilván akkor nem kell a while ciklus, akkor nem megy.
Miért? De, csatlakozom a sémához. Vagy akkor hogyan lehetne mégjobban csatlakozni hozzá? Ha nem csatlakoznék a sémához, az adatok while ciklussal való kilistázását se csinálná meg.
Na akkor ahelyett, hogy leírod mi az ami megy, inkább azt írtad volna le ami nem megy.
És igen. kell a while, mert a rekordszet nem feltétlenül egy elemű lesz akkor sem ha where van a query-be.
Vagy ha elég az első rekord, akkor a while helyett egy ifet írj, de a rekordszetből akkor is ki kell olvasnod az adatokat valahogy.
Elvileg megy így:
<?php
$con=mysqli_connect("localhost","kovoliver","monitor89","access");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="SELECT password, username FROM account WHERE username='akarmi'";
$result=mysqli_query($con,$sql);
// Associative array
/*$row=mysqli_fetch_assoc($result);
printf ("%s (%s)\n",$row["password"], $row["password"]);*/
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "Name: " . $row["username"]. " " . $row["password"]. "<br>";
}
}
//sprintf ("\n",$row["password"]);
// Free result set
mysqli_free_result($result);
mysqli_close($con);
?>
Azt írja ki, amit én akarok, szóval működik. Hála az égnek. Köszi a segítséget, rendesek vagytok! :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!