mysqli_stmt::bind_param() error: query with join

mysqli_stmt::bind_param() error: query with join

我有一个表单代码,可以根据城市 ID (idci) 从数据库中获取信息。我想使用此表单更新信息,但收到此错误消息:

mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement

查询工作正常,我在 phpmyadmin sql 输入中检查了它们。

如果在 $query 中我只留下 "select idci" 或 "select *",我可以在表格中看到城市 (idci) 的正确 ID,但其余字段为空。

如果 $query 是它在代码示例中的编写方式,我会在 table 中以第一个结果的形式获取信息,而不是选择要编辑的结果。

感谢您的帮助!

isset($_GET['idci']) ? $idci=$_GET['idci'] : $idci='';
isset($_GET['nameci']) ? $nameci=$_GET['nameci'] : $nameci='';
isset($_GET['nameco']) ? $nameco=$_GET['nameco'] : $nameco='';
isset($_GET['idco']) ? $idco=$_GET['idco'] : $idco='';
isset($_GET['submit']) ? $submit=true : $submit=false;


if(!$submit){
$query = "select idci, nameci, nameco, idco
        from city 
        JOIN country on country.idco=city.country_idco 
        ";
if($stmt = $mysqli->prepare($query))
{
$stmt-> bind_param('i', $idci);
$stmt->execute();
$stmt->bind_result($idci, $nameci, $nameco, $idco);
$stmt->fetch();

$stmt->close();
$mysqli->close();

echo'
<!DOCTYPE html>
<html>
<head>
<style>h1{color:red;}label{color:darkred;}</style>
<title>Edit user</title>
<meta charset=”UTF-8”>
</head>
<body>
<h1>Edit city:</h1>
<form action="" method="GET">
<label>cityID </label><input readonly name="idci" value="'.$idci.'"><br>
<label>city </label><input type="text" name="nameci" value="'.$nameci.'"><br>
<label>country </label><input type="text" name="nameco" value="'.$nameco.'"><br>
<label>countryID </label><input readonly name="idci" value="'.$idco.'"><br>

<input type=reset value=Clear>
<input type=submit value=Edit name=submit></form>

</body>
</html>
';
}
}else{
$query1 = "
            UPDATE city 
            JOIN country
            ON city.country_idco=country.idco
            SET city.nameci =?, country.nameco=?
            WHERE idci = ?";

if($stmt = $mysqli->prepare($query1))
{

$stmt->bind_param('ssii', $nameci, $nameco, $idco, $idci);

$stmt->execute();
$stmt->close();
}
$mysqli->close();

您的查询没有占位符,句号。所以 bindParam() 没有任何可操作的东西,你会得到确切的错误消息:

$query = "select idci, nameci, nameco, idco
        from city 
        JOIN country on country.idco=city.country_idco 
        ";
if($stmt = $mysqli->prepare($query))
{
$stmt-> bind_param('i', $idci);
                    ^---one parameter to bind, but absolutely NO ? in the query.

你能不能在更新中有更多的参数..你只有 3 个?在更新中,但在 bind_ 中有 4 个参数

 $query1 = "
        UPDATE city 
        JOIN country
        ON city.country_idco=country.idco
        SET city.nameci =?, country.nameco=?
        WHERE idci = ?";

if($stmt = $mysqli->prepare($query1))
{

 $stmt->bind_param('ssi', $nameci, $nameco, /*   this in not in update $idco , */ $idci);