1

やりたいこと:関数を使用して PDO を使用してデータベースに接続し、毎回接続を入力する必要がないようにします。

私が試したこと:

ライブラリ.php:

function dbconpdo() {
    $db = new PDO('mysql:host=localhost;dbname=dbname', 'username', 'password');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}

test.php:

include_once "templates/library.php";

    try {
        dbconpdo();
        $stmt = $db->query('SELECT * FROM users');
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo $row['user'];
            echo $row['password'];
            echo "test";
        }
    } catch(PDOException $ex) {
   echo $ex;
}

それはうまくいきませんでした。エラーは発生しませんでしたが、何も出力されませんでした。

何がうまくいったか:

test.php:

try {
    $db = new PDO('mysql:host=localhost;dbname=dbname', 'username', 'password');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $stmt = $db->query('SELECT * FROM users');
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['user'];
        echo $row['password'];
        echo "test";
        }
    } catch(PDOException $ex) {
   echo $ex;
}

それはうまくいきましたが、それに関する問題は、関数を完全に削除して手動で入力しなければならなかったことです。

私の質問: 接続するたびに手動で入力する必要がないように、データベースへの PDO 接続を作成する関数 (または同様のもの) を使用するにはどうすればよいですか?

4

2 に答える 2

1

PDOオブジェクトを操作するのではなく、最初の呼び出しでオブジェクトをインスタンス化し、後続の呼び出しのためにオブジェクトをキャッシュ/返す、どこでも呼び出すことができる単純な関数が必要な場合は、次のようにします。

<?php

function dbConnection()
{
    static $db;

    if (!$db instanceof PDO) {
        $db = new PDO('mysql:localhost;dbname=dbname', 'username', 'password');
    }

    return $db;
}

これはグローバル スコープの関数なので、どこからでも呼び出すことができ、次のように戻り値をローカル変数に割り当てることができます。

$db = dbConnect();
$db->prepare('SELECT name FROM user where id = :id');
// etc

あまりエレガントではありませんが、小さなスクリプトには便利です。お役に立てれば :)

編集:

このコンテキストでの static キーワードに関するちょっとした情報: http://www.php.net/manual/en/language.variables.scope.php#language.variables.scope.static

于 2013-11-08T02:51:47.980 に答える
0

私はオブジェクトを使用するのが好きなので、通常は必要に応じて使用するインスタンスを作成します。

class mySQL
{
    public $con;

    private $userName = "userName";
    private $passWord = "password";
    private $hostName = "mysql:host=localhost;dbname=yourDBName";
    private $isDebug=false;

    function __construct()
    {
        $this->con = new PDO ($this->hostName, $this->userName , $this->passWord);
        $this->con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    }

    function __destruct()
    {
        $this->con = null;
    }
}

$con=new mySQL();
$sql="select * from someTable";
$con->con->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

$con->execute()

これは主に、たまたまこのラップトップにあるオブジェクト内からカット アンド ペーストしたものですが、それがどこに向かっているのかがわかります。

于 2013-11-08T02:51:11.493 に答える