Call to a member function bind_param() on a non-object

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
C'è qualcuno che mi sa dire come mai se scrivo questo:
PHP:
$stmt1 = $mysqli->prepare("SELECT * FROM utenti WHERE username= ?, email= ? ");
	    		$stmt1->bind_param("ss", $username, $email);
	    		$stmt1->execute();
	    		$stmt1->store_result();

    			if(($stmt->num_rows > 0) OR ($stmt1->num_rows) > 0){ etc...
mi appare l'errore
PHP:
Call to a member function bind_param() on a non-object
in questa riga
PHP:
$stmt->bind_param('ss', $username, $email);
 
La preparazione dello statement è fallita perché la query ha un errore di sintassi.
Dovresti fare così per gestire questo tipo di errori:
PHP:
if ($stmt1 = $mysqli->prepare("SELECT * FROM utenti WHERE username= ? AND email= ? ")) {
                $stmt1->bind_param("ss", $username, $email); 
                $stmt1->execute(); 
                $stmt1->store_result(); 
                etc ...
} else {
    echo 'Hey, qualcosa è andato storto!';
}

(nell'esempio ti ho corretto anche la sintassi dell'istruzione SQL ;))
 
La preparazione dello statement è fallita perché la query ha un errore di sintassi.
Dovresti fare così per gestire questo tipo di errori:
PHP:
if ($stmt1 = $mysqli->prepare("SELECT * FROM utenti WHERE username= ? AND email= ? ")) {
                $stmt1->bind_param("ss", $username, $email); 
                $stmt1->execute(); 
                $stmt1->store_result(); 
                etc ...
} else {
    echo 'Hey, qualcosa è andato storto!';
}

(nell'esempio ti ho corretto anche la sintassi dell'istruzione SQL ;))

Questo il mio codice copleto che purtroppo mi da errore esattamente mi da "NO!" alla riga 15
PHP:
if($stmt1 = $mysqli->prepare("SELECT * FROM utenti WHERE username= ? AND email= ? ")){
	var_dump($stmt1);
$stmt1->bind_param("ss", $username, $email);
$stmt1->execute();
$stmt1->store_result();
$result = $stmt1->num_rows;

if($result > 0){

			while ($row = $stmt1->fetch_assoc())
			{
				echo $row['username'];
			}
		} else {
			echo "NO!";
		}
			
	} else {
		echo "2";
		}
Naturalmente nel database è presente una riga con tutti i dati che mi servono ma qua non li trova!? :incazz:
C'è qualcosa di sbagliato?
 
Nello spezzone che hai copiato non ci sono errori, il "NO!" è collegato a questo controllo:
PHP:
if($result > 0){ 
    
} else { 
    echo "NO!"; 
}
Significa che non sono stati trovati record con le clausole di ricerca impostate nella query, di conseguenza forse c'è un errore nel passaggio dei dati: prova a fare var_dump su $username ed $email e verifica se sono corretti.
PHP:
$stmt1->bind_param("ss", $username, $email);
var_dump($username);
var_dump($email);
 
Lo immaginavo anche io. Il punto è che i dati sono corretti. Ma non riesce ad estrarli. Bo. Appena riesco posto il codice di un altro controllo uguale ma fatto in modo diverso.
 
Evitando di usare il codice che ho postato prima, ho cambiato ed ora uso questo, secondo voi va bene?
PHP:
if($result = $mysqli->query("SELECT * FROM utenti ")){

	while($row = $result->fetch_assoc())
	{
		if($email2 == $row['email']){
			//Se è uguale metto in echo la domanda di sicurezza legata alla mail
			echo $row['domanda'];
		} else {
			echo "Email non presente nel nostro Database!";
		}
	}
} $result->close();
 

Discussioni simili