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

を取得しています、データベース内の既存のリンクにタグを追加する必要がありますこのコードは、私はこのエラーのためにgoogledしかし、残念なことに私が見つけた答えは十分な役に立たなかった。どんな助けもありがとう、これはおそらく単純なルーキーミスです。

答えて

6

$db->prepare()関数が正常に実行されたことを確認します。そうでない場合はfalseを返します。だから、あなたはまた、あなたがthis page上の最初の例のように、それは同様に成功したことを確認するtry/catchにPDOオブジェクトの宣言を置くべきfalse

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

に等しい変数にbindParam()を呼び出そうとすることができます:

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

原因は次のとおりです。クエリの後に – GolezTrol

+0

助けを借りて、私はすでに問題を発見しました。私は愚かにデータベースの古いバージョンに同意していました。あなたの時間を無駄にして申し訳ありません – user697110

+0

受け入れられた答えは有用ですが、このエラーメッセージには間違っています。これが問題だった場合は、エラーメッセージが異なります。 ( "メンバー関数** prepare()**を非オブジェクト上で呼び出す")。 – alttag

4

は、あなたがそれを使用することはできませんので、おそらく準備が失敗したprint_r($db->errorInfo());

を試してみてください。

+0

これは正解です(受け入れられたものではありません)。 '$ db-> prepare()'は、SQL文に誤字があるか、存在しない表や属性を参照すると失敗する可能性があります。 – alttag

関連する問題