2016-06-13 31 views
-1

のブール値でprepare()を呼び出すと、いくつかの問題が発生しますが、誰も助けませんでした。
Fatal error: Call to a member function bind_param() on boolean in - > nope。
Fatal error: Call to a member function prepare() on null - > nope。
Fatal error: Call to a member function count() on boolean - > nope。
Fatal error Call to a member function prepare() on null - > nope。
fatal error call to a member function prepare() on resource - > nope。
Error: Call to a member function prepare() on a non-object - > nope。致命的なエラー:メンバー関数を呼び出す

接続し、選択が正常に動作しますが、挿入のdidntが仕事をしたい:私は、私はPDOとPHP5とMySQLを使用しています。..

を行っています。

function AddNewUser($nickname, $email) 
{ 
    ini_set('display_errors', 1); //DELETE ME 
    ini_set('expose_php', 1); //DELETE ME 

    $pdo = EstablishDBCon(); 
    echo "Subscribe user..<br/>"; 

    $sql = "INSERT INTO db.table (nickname, email, insertdate, updatedate) VALUES (:nickname, :email, :insertdate, :updatedate)"; 

    try { 
     $stmt = $pdo->prepare($sql); //Error at this line 
     //id? 
     $stmt->bindParam(':nickname', $nickname, PDO::PARAM_STR); 
     $stmt->bindParam(':email', $email, PDO::PARAM_STR); 
     $stmt->bindParam(':insertdate', date("Y-m-d H:i:s"), PDO::PARAM_STR); 
     $stmt->bindParam(':updatedate', null, PDO::PARAM_NULL); 
     $stmt->exeute(); 

     CloseDBCon($pdo); 
     echo "Subscribed!<br/>"; 
    } catch (PDOException $e) { 
     echo 'Connection failed: ' . $e->getMessage(); 
    } 
} 

DBパターンは次のとおりです:私の機能です
|
ID(NOT NULL auto_incをint型)ニックネーム(varchar not null)|電子メール(varchar not null)| insertdate(datetime)| updatedate(datetime)

私はphpを初めて使用しています。このタイプのエラーは分かりません。 私は、エラーがスローされたコード、内側の線をマーク:

$stmt = $pdo->prepare($sql); //Error at this line 

誰かが私を助けることができますか?

ありがとうございます!

// EDIT:db_connection.php通称 接続:ここ

<?php 
echo 'Establishing MySQL Connection<br/>'; 

$pdo = null; 
$dsn = 'mysql: host=xx; dbname=xx'; 
$dbUser = 'xx'; 
$pw = 'xx'; 

try { 
    $pdo = new PDO($dsn, $dbUser, $pw); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    echo 'Connection established.<br/>'; 
} 
catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

return $pdo; 
?> 

がEstablishDBCon機能である。この場合には

function EstablishDBCon() 
{ 
    $pdo = include_once 'db_connection.php'; 
    return $pdo; 
} 
+3

'EstablishDBCon'関数を表示 – jszobody

+2

あなたのコードはデータベースに接続できませんでしたので、$ pdoは' false'です。エラーログをチェックし、エラーチェックを 'EstablishDBCon'クラスに入れてください。 – aynber

+0

'var_dump($ pdo);'ならば、それはTRUEまたはFALSEのいずれかの値を持つブール型データ型であることがわかります。 'EstablishDBCon()'の '__construct()'が何をしているのか分かりませんが、接続ハンドルを返さない**という面白い気持ちがあります。 – MonkeyZeus

答えて

1

関数を再利用する最も良い方法は、インクルードファイルの中に入れて、必要なファイルの先頭にインクルードすることです。だからあなたのdb_connection.phpの内側に、あなたの関数を作成します。あなたがそれを必要な場所

function EstablishDBCon() 
{ 
    $pdo = false; 
    try{ 
     // Put your PDO creation here 
    } catch (Exception $e) { 
     // Logging here is a good idea 
    } 
    return $pdo; 

} 

今、あなたは、その機能を使用することができます。使用する前に必ず$pdo !== falseを確認して、接続が失敗していないことを確認してください。

0

Call to a member function on boolean$pdoが目的ではないことを意味し、それはブール値です。だから、EstablishDBCon()は、データベースリソースではなく、成功した場合はtrueを、それ以外の場合はfalseを返す可能性があります。その関数のドキュメントをダブルチェックしてください。ここにsome relevant documentation on PDO that you'll needへのリンクがあります。

0

問題は、include_onceステートメントがインクルードされたファイルの内容が関数であるかのように値を返すことを期待する関数EstablishDBCon()にあります。

function EstablishDBCon() 
{ 
    $pdo = include_once 'db_connection.php'; 
    return $pdo; 
} 

しかし、それは、ここでhow include_once worksではありません:あなたは$pdo変数にTRUE(ブール値)で終わる理由

if the code from a file has already been included, it will not be included again, and include_once returns TRUE .

です。

いずれにしても、このような構成では、コードの実行が非常に難しくなります。 includeと友人のみを使用して、自己完結型のPHP関数を組み合わせたり、HTMLページの一部を互いに埋め込んだりすることをおすすめします。

関連する問題