带有消息'SQLSTATE [HY093]的'PDOException':参数号无效:

时间:2014-12-15 08:12:49

标签: php mysql pdo

我正在努力为我的项目找到错误的解决方案,有人可以帮助我并告诉我正确的方法。

这是我的代码:

$productkey = $_SESSION['key'];
  $productuser = $_SESSION['user'];
  $productemail = $_SESSION['email'];
// Include Database Connection
require 'assets/sys/config.php';
$query = dbConnect()->prepare("INSERT INTO _system (_product_key, _product_user, _product_email, _site_email, _site_title) VALUES (:_product_key, :_product_user, :_product_email, :_site_title, :site_email)");
    $query->bindParam(':_product_key', $productkey);
    $query->bindParam(':_product_user', $productuser);
    $query->bindParam(':_product_email', $productemail);
    $query->bindParam(':_site_title', $_POST['sitetitle']);
    $query->bindParam(':_site_email', $_POST['siteemail']);
    $query->execute();

我收到的错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in

3 个答案:

答案 0 :(得分:1)

在您的查询中,您有:

:site_email

但你确实绑定了这个:

$query->bindParam(':_site_email', $_POST['siteemail']);

这些是不同的,编辑:

$query->bindParam(':site_email', $_POST['siteemail']);

或者更改sql上的参数。

答案 1 :(得分:0)

您的绑定参数中有拼写错误。 :site_email代替:_site_email

顺便说一句......你知道你可以用一个简单的哈希数组做到这一点,对吧?只需将键命名为与查询中的占位符相同。

答案 2 :(得分:0)

正如其他人所指出的那样,这是错字。但是,您的_site_email_site_title顺序错误,因此您无法将数据插入到您期望的位置。

应该是:

$query = dbConnect()->prepare("INSERT INTO _system (_product_key, _product_user, _product_email, _site_title, _site_email) 
VALUES (:_product_key, :_product_user, :_product_email, :_site_title, :_site_email)");