【问题标题】:Error function bindParam() on a non-object during submitting a form提交表单期间非对象上的错误函数 bindParam()
【发布时间】:2014-03-14 10:55:21
【问题描述】:

我昨天有个问题让我很头疼,当我想用​​ php 提交表单时,它显示错误 Fatal error: Call to a member function bindParam() on a non-object

以及它的代码:

这就是配置文件::

【问题讨论】:

  • 请查看右窗格。注意到关于完全相同的错误的 几十个 问题? --->
  • 你试过哪个答案?
  • 你试过什么确定的答案?

标签: php object pdo fatal-error


【解决方案1】:

这意味着prepare 因为错误返回了false。设置

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

【讨论】:

  • 不要包含在 try catch 中。它是无用的、不灵活的和不安全的
  • 谁说“待在黑暗中”?
  • 最好以受控的方式捕获异常,这样您就可以看到错误消息。并不意味着它必须保持这种状态才能进行生产。虽然我不明白为什么会有害。
  • 可以看到没有catch的错误信息。让 try..catch 毫无用处,让你的代码无缘无故地膨胀
  • 错误不在连接过程中,而是在prepare。很可能与列数/名称不匹配。
【解决方案2】:

1.将您的 SQL 查询存储在变量 ($sql) 中

$ins = $db->prepare($sql);

2.为您的$_POST's 创建变量

3. 将 SQL 代码中的 :mu 等替换为 ?占位符

4. Bind 参数需要一个数据类型,然后是数据 - 例如

    $ins = $db->prepare($sql);
    :m = htmlentities($_POST['m1'], ENT_QUOTES, 'UTF-8');
    ...
    :su = htmlentities($_POST['su1'], ENT_QUOTES, 'UTF-8');
    $ins->bind_param('sssssss', :m, :tu, :w, :th, :f, :sa, :su);
    $ins->execute();

【讨论】:

  • 这真是一个绝妙的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
相关资源
最近更新 更多