【问题标题】:mysqli_stmt::bind_param() error: query with join [closed]mysqli_stmt::bind_param() 错误:使用连接查询 [关闭]
【发布时间】:2017-01-05 16:49:04
【问题描述】:

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

mysqli_stmt::bind_param(): 变量数不匹配 准备好的语句中的参数

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

如果在 $query 中我只留下“select idci”或“select *”,我可以在表单中看到 city(idci) 的正确 id,但其余字段为空。

如果 $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();

【问题讨论】:

  • 您没有WHERE 子句或任何? 来在查询中绑定参数(称为$idci)。

标签: php mysql mysqli bindparam


【解决方案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);

【讨论】:

  • 在查询中添加了 idco,结果相同。像你展示的那样从 bind_param 中删除 idco,同样的错误:\
  • 确保你有相同的号码和类型你声明..并最终显示你使用的新查询..
  • 现在已修复,其他用户的建议有所帮助。无论如何谢谢:)
【解决方案2】:

您的查询没有占位符,句号。因此,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.

【讨论】:

  • 哦,我明白了!只需添加“哪里 idci=?”在查询结束时。谢谢,它现在可以工作了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多