2010-04-20 13 views
2

Comme le dit le titre Im essayant de faire une insertion simple, mais rien n'est réellement inséré dans la table. J'essaie d'imprimer les erreurs, mais rien n'est signalé.PHP mysqli Insérer ne fonctionne pas, mais ne donne pas d'erreurs

Ma table d'utilisateurs a beaucoup plus de champs que ceux-ci 4, mais ils devraient tous par défaut.

$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)'; 
if($stmt = $db -> prepare($query)) 
{ 
    $stmt -> bind_param('ssis', $username, $password, $newlevel, $realname); 
    $stmt -> execute(); 
    $stmt -> close(); 
    echo 'Any Errors: '.$db->error.PHP_EOL; 
} 

Il n'y a pas d'erreur donné, mais quand je vais regarder le tableau dans phpmyadmin il n'y a pas une nouvelle ligne ajoutée. Je sais avec certitude que les types sont corrects (chaînes et entiers). Est-ce qu'il y a vraiment quelque chose qui ne va pas ici ou est-ce que cela a quelque chose à voir avec le fait que j'ignore les autres colonnes? J'ai environ 8 colonnes dans la table des utilisateurs.

+0

Avez-vous vérifié que vous êtes bien connecté? Est-ce qu'un "SELECT" fonctionne? – thetaiko

+0

De même, quelles sont les valeurs de $ username, $ password, $ newlevel et $ realname? Sont-ils tous réglés correctement? – thetaiko

Répondre

1

Vérifiez si la chaîne "Toutes les erreurs" est en cours d'impression. Si ce n'est pas le cas, l'instruction:

if ($stmt = $db->prepare($query)) 

renvoie false. Vous devez déplacer echo 'Any Errors: '.$db->error.PHP_EOL; en dehors du bloc conditionnel.

1

Initialisez les valeurs de $ username, $ password, $ newlevel, $ realname avant le $ stmt -> execute(); déclaration. Sinon, vous devez initialiser et essayer

+0

La documentation sur le site de PHP n'est pas d'accord avec vous. http://www.php.net/manual/fr/mysqli-stmt.bind-param.php – thetaiko

2

Vous devez vérifier les erreurs à chaque étape du processus: Lorsque vous vous connectez, lorsque vous préparez l'instruction, quand vous liez, quand vous exécutez et quand vous fermez. Dans votre code, en supposant que le handle $db a été correctement créé, la vérification d'erreur se produit après l'appel ->close(), qui devrait aboutir, il n'y aura donc aucune erreur à ce stade.

Quelque chose le long de ces lignes va montrer où les choses ont explosé:

$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)'; 
$stmt = $db->prepare($query); 
echo 'prepare error: ', $db->error, PHP_EOL; 
$stmt->execute(); 
echo 'execute error: ', $db->error 
etc.... 
1
$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)'; 
if($stmt = $db -> prepare($query)){ 

    $stmt -> bind_param('ssis', $username, $password, $newlevel, $realname); 

    $username='testname';$password='testpwd';$level=5;$realname='testrealname'; 

     $stmt -> execute(); echo "inserted SuccessFully"; $stmt -> close(); } 
else { printf("Prepared Statement Error: %s\n", $mysqli->error);} 

essayer ce code. Si la requête est exécutée avec succès, elle affiche "Inséré avec succès", sinon elle montre l'erreur.

6

Si vous avez désactivé la validation automatique, vous devrez appeler explicitement la méthode de validation après avoir exécuté la requête.

$stmt->execute(); 
$db->commit(); 
$stmt->close();