2016-04-14 12 views
-3

Also arbeite ich an einem einfachen Login-Skript und ich habe ein Problem, wo ich diesen Fehler bekomme.Warnung: mysqli_num_rows() erwartet, dass Parameter 1 mysqli_result ist

<?php 
 
require_once './php/db_connect.php'; 
 
?> 
 

 
<?php 
 
$username=""; 
 
$password=""; 
 
// username and password sent from form 
 
$myusername=$_POST['myusername']; 
 
$mypassword=$_POST['mypassword']; 
 

 

 
$sql="SELECT * FROM logins WHERE username='$myusername' and password='$mypassword'"; 
 
$result=$db->query($sql); 
 

 
// Mysql_num_row is counting table row 
 
$count=mysqli_num_rows($result); 
 

 
// If result matched $myusername and $mypassword, table row must be 1 row 
 
if($count==1){ 
 

 
// Register $myusername, $mypassword and redirect to file "login_success.php" 
 
session_register("myusername"); 
 
session_register("mypassword"); 
 
header("location:login_success.php"); 
 
} 
 
else { 
 
echo "Wrong Username or Password"; 
 
} 
 
?>

Aber ich kann nicht scheinen, um es zu lösen. Ich denke, ich muss vielleicht ändern, wie ich die Abfrage von SELECT bekomme, aber nicht so sicher wie.

+0

Sie mischen Object Oriented mit Procedural-Datenbankverbindung. – Martin

+0

Ihr Code ist * weit offen * bis ** SQL-Injektion **. Sie sollten prüfen, ob Abfrageparameter mit vorbereiteten Anweisungen verwendet werden. – David

+1

Aber @David, mein Passwort ist wirklich "OR" 1 "=" 1 " –

Antwort

0

Sie mischen Object Oriented mit Procedural-Datenbankverbindung.

Wenn Sie read the manual Sie, dass für Objektorientierter Ansatz sehen Sie verwenden sollten:

int $ mysqli_result-> num_rows;

so

$sql="SELECT * FROM logins WHERE username='$myusername' and password='$mypassword'"; 
$result=$db->query($sql); 

// Mysql_num_row is counting table row 
$count= $result->num_rows; 
-1
$sql="SELECT * FROM logins WHERE username='$myusername' and password='$mypassword'"; 
$result=$db->query($sql); 

Hier Ihre Anfrage aus irgendeinem Grund fehlgeschlagen ist, und hat einen boolean FALSE, keine Instanz von mysqli_result.

Sie sollten den Fehler hier verarbeiten und nicht an mysqli_num_row übergeben.

+0

kümmern, um den Downvote zu erklären? – Quassnoi

+0

Es ist nicht mein Downvote, aber Ihre Antwort beantwortet nicht die Frage, die das OP stellt, weshalb ihr 'mysqli_num_rows' den Variableninhalt in' $ result' nicht als MySQL-Asset erkennt. – Martin

+0

@Martin: Ja, tut es. 'php -r '$ m = neues mysqli (NULL, NULL, NULL," Test "); $ r = $ m-> Abfrage ("SELECT 1"); echo mysqli_num_rows ($ r). "\ n"; "" - funktioniert gut für mich. Es ist nur so, dass 'query' einen Booleschen Fehler zurückgibt. – Quassnoi

Verwandte Themen