我的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>
我的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');
我尝试提交时的错误是:致命错误:在第18行的C:... \ rent.php中调用boolean上的成员函数execute()
电子邮件,msg_text属于varchar类型
答案 0 :(得分:14)
phone
也可以返回mysqli->prepare
(检查http://php.net/manual/en/mysqli.prepare.php)。您的问题是FALSE
代替INSET
。
答案 1 :(得分:5)
这可能对某人有所帮助: 我面临同样的问题。 在我的情况下,我错过了在执行第二份预备陈述之前关闭第一份准备好的陈述。
当我在执行第二个准备语句之前添加$select_stmt_type->close();
时,它解决了问题。
答案 2 :(得分:1)
您的SQL预处理语句需要更正 shudent 说,但我认为您还必须在调用->bind_param()
之前使用->execute()
设置值(不需要任何参数)。
$stmt = $conn->prepare('INSERT INTO renter (email, msg_text) VALUES(?, ?)');
$stmt->bind_param("ss", $_POST['email'], $_POST['msg_text']);
$stmt->execute();
请参阅PHP官方网站上的文档和示例:http://php.net/manual/fr/mysqli.prepare.php
答案 3 :(得分:1)
要捕获错误,请执行以下操作
$req = $conn->prepare('INSERT INTO renter (email, msg_text) VALUES(?, ?)');
if(!$req){
echo "Prepare failed: (". $conn->errno.") ".$conn->error."<br>";
}
因为prepare返回布尔值。调试代码时请使用,并按照注释中的说明引用error reporting。