我想在我的数据库中保存表格信息。没有声明,它可以工作,但是我想包括它们。
提交表单时,出现以下错误消息:
-警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定变量的数量不匹配
-致命错误:未捕获错误:调用未定义函数execute()
<?php
$id= " 1"; $firstname = $_POST["Vorname"]; $lastname = $_POST["Nachname"]; $email = $_POST["EMailAdresse"]; $msg = $_POST["IhrAnliegen"];
$mysqli = new mysqli("localhost", "user", "password", "database"); if ($mysqli->connect_errno) {
die("Verbindung fehlgeschlagen: " . $mysqli->connect_error); }
$sql = "INSERT into Requests SET email ='$email' , firstname
='$firstname' , lastname = '$lastname' , msg = '$msg'"; $statement = $mysqli->prepare($sql); $statement->bind_param("s", $email ,$firstname ,$lastname ,$msg);
$statement = execute()
?>
答案 0 :(得分:2)
第一期:
您的代码中有两行出现问题,第一行与查询有关:
$sql = "INSERT into Requests SET email ='$email' , firstname ='$firstname' , lastname = '$lastname' , msg = '$msg'";
您应该将查询与数据分开编写,而不是输入要字段存储的变量,而应使用问号。您稍后将使用bind_param将变量传递到查询中。
第二期:
您遇到的第二个问题是您的bind_param,第一个参数是错误的,通过写's',您告诉函数期望一个字符串变量。
$statement->bind_param("s", $email ,$firstname ,$lastname ,$msg);
第三期:
您当前无法正确执行查询,您正在通过调用函数来覆盖语句,而不是从对象中运行该函数:
$statement = execute()
请在下面的解决方案中查看如何使其正常工作。
要解决第一个问题,您将需要用如下问号替换查询中的变量:
$sql = "INSERT into Requests SET email = ?, firstname = ?, lastname = ?, msg = ?";
然后,您需要更新以下行,以将上面查询中的问号替换为实际数据,并以它们在查询中出现的顺序输入。
$statement->bind_param("ssss", $email, $firstname, $lastname, $msg);
如您所见,我将您的's'更改为'ssss',这意味着我们期望使用四个字符串,而不是一个。
如果您期望一个字符串,一个整数然后再加上两个字符串,则改为写“ siss”。
要解决第三个问题,您将需要通过以下方式正确地实际执行脚本:
$statement->execute();