1

私は経験の浅い php プログラマーで、数日前に PDO について知りました。現在、Web サイトのコードを PDO を使用するように移植しようとしていますが、作成した PDO オブジェクトを使用しようとするとエラーが発生します。

私が得ているエラーは次のとおりです。

Fatal error: Call to a member function prepare() on a non-object in ... file2.php ...

コードは次のようになります。

index.php

class myClass
{
        ... variables ...

        ... functions ...

        public function myFunction() // gets called on page load, outputs content to page
        {
            ... stuff ...

            require('file1.php');

            ... stuff ...
        }
}

file1.php

require_once('mysql_connect.php'); // create pdo object if not created

... stuff ...

require_once('file2.php');

// I can use the PDO object in here to make queries

$output = function2(); // function2 is in file2.php

... stuff ...

file2.php

require_once('mysql_connect.php'); // create pdo object if not created

function function2()
{
    ... stuff ...

    // PDO error occurs here
    $stmt = $db->prepare(...);
    makeQuery($stmt, array(...));

    return $something;
}

mysql_connect.php

try 
{
    $db = new PDO("mysql:$dbhost=localhost;dbname=$dbname;charset=utf8", $dbuser, $dbpass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (PDOException $e) 
{
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

function makeQuery($stmt, $array = array())
{
    try 
    {
        $stmt->execute($array);
    }
    catch (PDOException $e) 
    {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }
}
4

3 に答える 3

1

私があなたの論理を正しく理解しているなら、あなたはmyFunction2内でPDOオブジェクトを使用しようとしています-PDOオブジェクトをパラメーターとして渡しますか、それともグローバル変数として宣言しますか?そうしないと、範囲外になり、使用できなくなるからです。

于 2012-07-05T15:19:35.713 に答える
0

mysql_coonectを再度含める必要はありません。一度だけ含めてください。

 index.php
-class myClass defined
--method myFunction defined (it get's called on pageload & returns the page output)
---include file1.php
----require_once('mysql_connect.php') (creates pdo object)
----*I can use the pdo object here successfully*
----require_once('file2.php')
-----function myFunction2 defined
于 2012-07-05T15:14:23.147 に答える
0

DSN、ユーザー名、およびパスワードは正しいですか?もしそうなら、あなたはそのようなことをします:

$pdo = new PDO("dsn");
/* Some code... at the moment something changes $pdo value */
$pdo->prepare("QUERY");
于 2012-07-05T15:14:30.093 に答える