Mon html:
<form action="rent.php" method="post"><pre>
Email : <input type="text" name="email">
Message : <input type="text" name="msg_text">
<input type="submit" value="Rent it">
</pre></form>
Mon fichier rent.php:
<?php
require_once 'login.php';
$conn = new mysqli($hn, $un, $pw, $db);
if ($conn->connect_error) {
die($conn->connect_error);
}
$query = "SET NAMES utf8";
$result = $conn->query($query);
if (!$result) {
die($conn->error);
}
$req = $conn->prepare('INSET INTO renter (email, msg_text) VALUES(?, ?)');
$req->execute(array($_POST['email'], $_POST['msg_text']));
header('Location: menu.php');
Mon erreur lorsque j'essaie de soumettre est la suivante: Erreur fatale: Appel d'une fonction membre execute () sur un booléen dans C: ...\rent.php à la ligne 18
email, msg_text sont de type varchar
mysqli->prepare
peut également renvoyer FALSE
(consultez http://php.net/manual/en/mysqli.prepare.php ) en cas d'erreur. Votre problème est que vous avez INSET
au lieu de INSERT
.
Cela peut aider quelqu'un: Je faisais face au même problème …__. Dans mon cas, j'ai manqué de fermer la première déclaration préparée avant d'exécuter la deuxième déclaration préparée.
Lorsque j’ai ajouté $select_stmt_type->close();
avant d’exécuter la deuxième instruction prepare, le problème a été résolu.
Votre instruction SQL préparée doit être corrigée comme indiqué dans shudent, mais je pense que vous devez également définir les valeurs avec ->bind_param()
avant d'appeler ->execute()
(qui ne prend aucun paramètre).
$stmt = $conn->prepare('INSERT INTO renter (email, msg_text) VALUES(?, ?)');
$stmt->bind_param("ss", $_POST['email'], $_POST['msg_text']);
$stmt->execute();
Voir la documentation et les exemples sur le site officiel PHP: http://php.net/manual/fr/mysqli.prepare.php
Juste pour ajouter. Une erreur similaire survient lorsque le nom de la colonne mysql est incorrect dans php. J'ai trouvé l'erreur ci-dessous pour mon état lorsque j'ai imprimé l'erreur $ conn->.
errno: 1054, erreur: colonne inconnue 'xyz' dans la 'liste de champs'