2011-10-29 66 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

相關問題