0

私はPHPが初めてです->初めての開発者です。私は自分の Web アプリケーションに取り組んでおり、ほぼ完成しています。それにもかかわらず、私のSQLのほとんどは、直接mysqlリクエストを使用してコードを介して直接行われました。これは私がそれにアプローチした方法です:

classes_db.phpで、db 設定を宣言し、DB 接続を開いたり閉じたりするために使用するメソッドを作成しました。通常のページでこれらのオブジェクトを宣言します。

class classes_db {

    public $dbserver = 'server;
    public $dbusername = 'user';
    public $dbpassword = 'pass';
    public $dbname = 'db';

    function openDb() {
        $dbhandle = mysql_connect($this->dbserver, $this->dbusername, $this->dbpassword);
        if (!$dbhandle) {
            die('Could not connect: ' . mysql_error());
        }
        $selected = mysql_select_db($this->dbname, $dbhandle)
                or die("Could not select the database");

        return $dbhandle;
    }


    function closeDb($con) {
        mysql_close($con);
    }
}

私の通常のページでは、これを行います:

<?php
require 'classes_db.php';
session_start();

//create instance of the DB class
$db = new classes_db();

//get dbhandle
$dbhandle = $db->openDb();

//process query
$result = mysql_query("update user set username = '" . $usernameFromForm . "' where iduser= " . $_SESSION['user']->iduser);

//close the connection
if (isset($dbhandle)) {
    $db->closeDb($dbhandle);
}

?>

私の質問は次のとおりです。それを正しく行い、オブジェクト指向で安全にする方法は? 準備されたクエリを組み込む必要があることはわかっています->最善の方法は? いくつかのコードを提供してください

4

2 に答える 2

1

mysql_* の使用をやめ、代わりにmysqli とPDOを使用してください

PHP PDO と通常の mysql_connect

mysql_* 関数は古くなっています。長い間、mysql_* は他の一般的な SQL データベース プログラミング インターフェイスと対立してきました。プリペアド ステートメント、ストアド プロシージャ、トランザクションなどの最新の SQL データベースの概念はサポートしていません。mysql_* のもう 1 つの問題は、開発者から最近注目されていないことです。メンテナンスされていないため、セキュリティの脆弱性が修正されていないか、新しいバージョンの MySQL では完全に機能しなくなる可能性があります。 . また、最近、PHP コミュニティは mysql_* の緩やかな非推奨を開始するのに適していると判断しました。これは、言語から mysql_* 関数を最終的に完全に削除するという遅いプロセスが見られるようになることを意味します (Don'

PDO ははるかに優れたインターフェイスを備えているため、生産性が向上し、より安全でクリーンなコードを記述できます。PDO には、さまざまな SQL データベース ベンダー用のさまざまなドライバーもあり、別のインターフェイスを再学習することなく、他のベンダーを簡単に使用できます。(おそらく、わずかに異なる SQL を学ぶ必要がありますが)。エスケープされた文字列を SQL に連結する代わりに、PDO でパラメーターをバインドします。これは、クエリを保護するためのより簡単でクリーンな方法です。パラメーターのバインディングを使用すると、同じ SQL クエリをわずかに異なるパラメーターで何度も呼び出すときに、パフォーマンスを向上させることもできます。PDO には、複数のエラー処理方法もあります。私が mysql_* コードで見た最大の問題は、一貫した処理が行われていないか、まったく処理されていないことです! 例外モードの PDO では、

現在、PDO は PHP インストールでデフォルトで有効になっていますが、PDO を使用するには 2 つの拡張機能が必要です。PDO と、pdo_mysql などの使用するデータベース用のドライバーです。MySQL ドライバーのインストールは、ほとんどのディストリビューションで php-mysql パッケージをインストールするのと同じくらい簡単です。

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

于 2012-11-03T17:00:13.973 に答える
0

RedBeanPHP を強くお勧めします。これは非常に堅牢な MySQL データベース ライブラリであり、接続、クエリ、サニタイズ、準備、PDO の使用など、データベース インタラクションのすべてを抽象化します (PHP 開発に慣れていないことを考えると、これは素晴らしいことです)。

ここでチェックしてください:http: //redbeanphp.com/

接続のセットアップがいかに簡単かを示す例:

require('rb.php');
R::setup('mysql:host=localhost; dbname=mydatabase','user','password');

RedBeanPHP のセットアップ: http://redbeanphp.com/manual/setup

データベース オブジェクトを処理するクラスを作成する場合、インターフェイスや抽象クラスを使用して、特定のオブジェクトの動作規則 (CRUD など) を設定する必要があります。

そのデータベース接続を共通ファイルに含め、それをすべての PHP スクリプトに含めるだけで、準備は完了です。

于 2012-11-03T16:57:38.447 に答える