PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem bei Umstellung von mysql auf mysqli


moneywasher
29.12.2010, 14:21
Ich hab da mal eine Frage zu - MYSQLI.
Bin dabei mein Script von mysql auf mysqli umszustellen und stoße schnell an Grenzen meinerseits. Was mir fehlt ist wohl die korrekte sytax für mysql_num_rows nur halt eben auf mysqli bezogen. Und es müssen wohl noch zuvor die Ergebnisse "gefecht" werden, weil meine eiligst eingefügten var_dumps nur "NULL" Werte über meinem kläglichen num_row Versuch ausspucken.

Wer weiß, wie das ganze unter mysqli auszusehen hat ??
Unter mysql hat's ohne probs gefunzzt.

hier mein Scriptblock:
$userlogin = "SELECT user_id, username, gender
FROM users
WHERE username = '$user' AND password = '$pw'
LIMIT 0,1";

$result = $db->prepare($userlogin);

$result->execute();

$result->bind_result( $user_id, $username, $gender );

var_dump ($user_id); var_dump ($username); var_dump ($gender);

if ($result->num_rows == 1) {

session_start();
// der User wird eingeloggt - Sessions definiert und User weitergeleitet

$_SESSION['id'] = session_id();
$_SESSION['user_id'] = $user_id;
$_SESSION['username'] = $username;
$_SESSION['user_gender'] = $gender;



header("Location: profile_rain.php?id=$row[user_id]");
}
else {
// falsche Zugangsdaten - $loginfailed wird jetzt wahr - Nachricht im Template ausgeben
$loginfailed = true;
}

Gruß,
moneywasher

------------------------------------------------------------------------
XAMPP 1.7.3 - PHP 5.3.1- php.ini Set: error_reporting = E_ALL | E_STRICT

phpBuddy
29.12.2010, 16:06
Hallo moneywasher,

kennst Du bereits das MySQLi Tutorial (http://www.phpbuddy.eu/mysqli-erweiterung-php-5.html) auf der Hauptseite? Da findest Du eventuell den ein oder anderen Tipp, der einen Umstieg erleichtert.
Bei Verwendung von Prepared Statements musst Du das Abfrageergebnis erst zwischenlagern. Die Funktion dafür ist $obj->store_result() (http://de3.php.net/manual/en/mysqli-stmt.store-result.php), die Vorgehensweise ist prepare() -> execute() -> store_result() -> num_rows

Zum Zeitpunkt des execute() liegt das Abfrageergebnis noch in der Datenbank und PHP hat keine Möglichkeit darauf zuzugreifen und kann somit die Anzahl nicht direkt ermitteln. Durch das store_result() wird das Abfrageergebnis in den Speicher geladen, wo PHP dann Informationen über die Abfrage ermitteln kann - u.a. num_rows.

moneywasher
29.12.2010, 19:57
Hallo phpBuddy,

Danke für deine schnelle Hilfe !! Nun läuft es auch unter mysqli.
Fehlte halt doch noch das store_result() !! Das num_rows war okay so.

Menno, mysqli ist doch etwas schwerer verständlich als mysql, für mich zumindest. Naja, etwas neues zu pauken geht halt nicht an 'nem halben Tag. :)
Dachte mir aber wenn schon umstellen, dann jedenfalls gleich auf die OOP Variante.

Nochmals Vielen Dank für die Hilfe !!

Gruß,
moneywasher