【问题标题】:'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number:带有消息“SQLSTATE [HY093]”的“PDOException”:参数号无效:
【发布时间】:2014-12-15 08:12:49
【问题描述】:

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

这是我的代码:

$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

【问题讨论】:

  • 你有没有 session_start();一开始?

标签: php mysql pdo


【解决方案1】:

在您的查询中,您有:

:site_email

但你确实绑定了这个:

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

这些是不同的,编辑:

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

或者改变你的sql参数。

【讨论】:

  • 谢谢!几个小时后,我需要检查是否有错字;)
  • 碰巧,记住(顺便说一句)您可以在 bindparam 上指定 var 的类型,例如数字或字符串 =)它可以帮助提高安全性
【解决方案2】:

您的绑定参数中有错字。 :site_email 而不是 :_site_email

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

【讨论】:

  • 这发生在我们所有人身上。上次我花了 4 个小时解决一些问题,然后才意识到我一开始就打错了……:(
【解决方案3】:

正如其他人指出的那样,有错字。但是你也有_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)");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 2013-08-04
    • 2020-08-11
    • 2023-01-27
    相关资源
    最近更新 更多