2009-04-07 6 views
0

J'ai deux déclarations suivantes mysqli, et le second: les rendementsmysqli pourquoi cela arrive-t-il?

Fatal error: Call to a member function bind_param() on a non-object in ...

Pourquoi cela se produit? Est-ce que cela signifie que j'ai besoin d'ouvrir deux connexions différentes? Y at-il un moyen d'éviter cela (j'aime garder les détails de connexion SQL dans un fichier)?

Voici le code:

$db = new mysqli("localhost", "root", "", "database"); 

$stmt = $db->prepare("UPDATE posts SET vote_".$_POST['vote']." = vote_".$_POST['vote']." + 1 WHERE id=?"); 
$stmt->bind_param('s', $_POST['id_post']); 
$stmt->execute(); 
$stmt->close(); 

$stmt = $db->prepare("INSERT INTO votes (kind, users_id, posts_id) VALUES (?, ?, ?)"); 
$stmt->bind_param('sss',$_POST['vote'],$_POST['id_user'],$_POST['id_post']); 
$stmt->execute(); 
$stmt->close(); 
+0

J'espère bien que vous êtes en train d'assainir ces entrées post. – cletus

+0

Je pensais que l'utilisation de mysqli permettrait d'éviter complètement l'injection de sql? – 0plus1

+1

Si vous utilisez des valeurs/paramètres liés, vous êtes à l'abri de l'injection SQL. Mais qu'est-ce qui empêche l'utilisateur d'envoyer l'identifiant de quelqu'un d'autre? –

Répondre

1

Je pense que votre variable $ stmt est nulle lorsque vous appelez bind_param dessus. peut-être votre $ _POST ['vote'] est vide? vous pouvez le vérifier avant de lier le paramètre sur la commande

0

Quelque chose aurait pu se passer avec $db->prepare(), vérifiez $db->error.

+0

Ce fut le problème, j'ai nommé différemment l'un des champs .. honte à moi pour ne pas vérifier l'erreur .. Je pensais que c'était un problème de faire deux requêtes consécutives .. merci! – 0plus1

Questions connexes