mysqli_stmt :: bind_param()错误:使用join查询

时间:2016-08-29 15:28:29

标签: php mysql mysqli bindparam

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

  

mysqli_stmt :: bind_param():变量数量与数量不匹配   准备好的陈述中的参数

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

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

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

感谢您的帮助!

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

2 个答案:

答案 0 :(得分:1)

您的查询没有占位符,期间。所以start.js没有任何操作,你得到了确切的错误信息:

bindParam()

答案 1 :(得分:1)

你可能在更新中有更多的参数...你只有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);