2011-10-29 53 views
1

我正在学习如何使用PHP,并有一个简单的问题。致命错误:调用成员函数bindParam()

<?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!'; 
?> 

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

Fatal error: Call to a member function bindParam() on a non-object in /usr/users2/mieic2009/ei09072/public_html/TP1/Delicious/addTag.php on line 9

我检查了一遍又一遍,似乎无法找到有什么错这段代码,我搜索了这个错误,但不幸的是,我发现的答案没有足够的帮助。任何帮助将不胜感激,这可能是一个简单的菜鸟错误。

回答

6

我会检查$db->prepare()函数成功执行。如果没有,它将返回错误。所以,你可以尝试调用bindParam()上等于false

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(); 
} 
+0

可能是因为;查询后。 – GolezTrol

+0

感谢您的帮助,我已经找到了问题,我愚蠢地加入了旧版本的数据库,花了1个多小时看了这个,却没有注意到它。对不起,浪费你的时间 – user697110

+0

接受的答案是有用的,但对此错误消息不正确。如果这是问题,那么错误信息会有所不同。 (“调用成员函数** prepare()**在非对象上”)。 – alttag

4

尝试print_r($db->errorInfo());

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

+0

这是正确的答案(不是接受的答案)。如果SQL语句中有拼写错误,或者引用了不存在的表或属性,'$ db-> prepare()'可能会失败。 – alttag

相关问题