急于解决“警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定变量的数量不匹配”吗?

时间:2019-08-14 09:19:22

标签: php mysqli

我想在我的数据库中保存表格信息。没有声明,它可以工作,但是我想包括它们。

提交表单时,出现以下错误消息:

-警告: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()


?>

1 个答案:

答案 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();