web-dev-qa-db-fra.com

Appel à une fonction membre execute () sur un booléen dans

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

7
idkn

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.

14
tomas.lang

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.

4
Dhaval Bhimani

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

1
Patrick Janser

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'

1
Vaibs