【问题标题】:Fatal error: Call to a member function bindParam()致命错误:调用成员函数 bindParam()
【发布时间】:2012-09-29 18:06:41
【问题描述】:

我正在学习使用 PHP,但遇到了一个简单的问题。

<?php
   ini_set('display_errors', 'On');
  error_reporting(E_ALL);
  $db = new PDO('sqlite:/usr/users2/mieic2009/ei09072/public_html/TP1/Delicious    /Database.db');
   $a = $_GET['linkRef'];
   $b = $_GET['tagToAdd'];

   $checkIdLink = $db->prepare('SELECT idLink FROM Links WHERE nome_L = :link_n;');
   $checkIdLink->bindParam(':link_n', $a, PDO::PARAM_STR);
   $checkIdLink->execute();
   $linkID = $checkIdLink->fetch();

   $insertLink = $db->prepare('INSERT INTO Tags (nome_T, idLink) VALUES (:addTag, :link_id)');
   $insertLink->bindParam(':addTag', $b, PDO::PARAM_STR);
   $insertLink->bindParam(':link_id', $linkID, PDO::PARAM_INT);
   $insertLink->execute();

    echo 'Tag added to the specified link!';
?>

此代码应将标签添加到数据库中的现有链接,但是我收到此错误

致命错误:在非对象上调用成员函数 bindParam() /usr/users2/mieic2009/ei09072/public_html/TP1/Delicious/addTag.php 上 第 9 行

我一遍又一遍地检查,似乎找不到这段代码有什么问题,我用谷歌搜索了这个错误,但不幸的是我找到的答案没有足够的帮助。任何帮助将不胜感激,这可能是一个简单的新手错误。

【问题讨论】:

    标签: php


    【解决方案1】:

    我会检查$db-&gt;prepare() 函数是否成功执行。如果没有,它将返回 false。因此,您可能会尝试在等于 false 的变量上调用 bindParam()

    http://www.php.net/manual/en/pdo.prepare.php

    您还应该将 PDO 对象声明放入 try/catch 以确保它也成功,就像在 this page 的第一个示例中一样:

    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    

    【讨论】:

    • 可能是因为 ;查询之后。
    • 感谢您的帮助,我已经找到了问题所在,我愚蠢地加入了旧版本的数据库,花了 1 个多小时才注意到它。很抱歉浪费您的时间
    • 接受的答案很有用,但对于此错误消息不正确。如果这是问题所在,则错误消息会有所不同。 (“在非对象上调用成员函数 prepare()”)。
    【解决方案2】:

    试试print_r($db-&gt;errorInfo());

    可能准备失败,所以你不能使用它。

    【讨论】:

    • 这是正确答案(不是公认的答案)。 $db-&gt;prepare() 在 SQL 语句中出现拼写错误或引用不存在的表或属性时可能会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2011-08-22
    • 1970-01-01
    • 2014-02-05
    • 2014-04-29
    • 2015-09-14
    相关资源
    最近更新 更多