【问题标题】:Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]
【发布时间】:2014-05-31 17:31:20
【问题描述】:

我在 PHP 中使用 PDO 进行了以下查询:

$form = $_POST;
$alias = $form[ 'alias' ];
$nombre = $form[ 'nombre' ];
$pass = $form[ 'pass' ];
$sql = "INSERT INTO tbmeseros ( alias_mesero, nombre_mesero, pass_mesero ) VALUES (:alias,:nombre,:pass)";
}
$query = $dbh->prepare( $sql );
$query->execute(array(':alias'=>$alias,':nombre'=>$nombre,':pass'=>$pass) );//THIS IS LINE 92

但我收到警告:

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /.../NuevoAdminMeseros.php on line 92

我没有看到警告的原因,我认为这两个语句都有三个变量。

【问题讨论】:

  • 仔细检查您的代码是否有拼写错误。如果 SQL 中的 :parameters 与 execute() 中的数组键不匹配,则会出现此错误。
  • @Barmar,我从上一个问题中了解到,我的代码中可能存在拼写错误,但在这种情况下我无法找到它们。我检查了表单、查询和数组键,我没有发现任何错字。但我现在会再次检查。无论如何谢谢你。
  • 单独的 } 是一个解析错误。由于代码没有作为解析错误失败,这意味着合作伙伴 { (和条件语句)不在问题中。似乎$sql 在遇到错误时不是问题中的插入语句,或者类似的“其他人怎么能看到?”错误 - 因为问题中的代码不足以解释问题,并且具有误导性。 -1.

标签: php pdo


【解决方案1】:

试试这个。

$form = $_POST;
$alias = $form['alias'];
$nombre = $form['nombre'];
$pass = $form['pass'];
$sql = "INSERT INTO tbmeseros (alias_mesero, nombre_mesero, pass_mesero) VALUES (:alias,:nombre,:pass)";
$query = $dbh->prepare($sql);
$query->execute(array(':alias' => $alias,':nombre' => $nombre,':pass' => $pass));

【讨论】:

  • 我已经尝试过你的建议,我得到了同样的错误。我也只用一个参数检查了它,并且显示了相同的错误。谢谢。
  • 警告没有消失,点击提交按钮后,表单数据存储在数据库中。有什么建议可以删除警告信息吗?。
  • @AD7six,你是对的。我没有选中答案,我发现了问题,它是准备语句之前的 }。谢谢
  • @AD7six 我没听懂你
  • @AD7six,现在一切正常,无需进一步。没有发现错字是我的错。我对此投了反对票,这已经足够了。感谢您的时间和精力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多