2009-09-05 8 views
5

良い例のためにウェブを精査しましたが、何も見つかりませんでした。プリペアドステートメントで適切なmysqli拡張クラスを作成するには?

私はいくつかの複雑さを抽象化するヘルパークラスを作るためにmysqliクラスを拡張しようとしています。私が達成したい主な事の一つは、準備されたステートメントを利用することです。

私は実際にどこから始めたいのか、入力と出力を1つのクラスで適切に処理する方法がわかりません。別の問題は、プリペアドステートメントを使用している間に配列としてデータを出力できないということです。

私は実際に正しい方向に私を指すために簡単な例を使用することができます。

ありがとうございます!

答えて

5

Zend_Dbの実装、特にZend_Db_Selectを確認してください。実際には、独自のものを開発するのではなく、そのものを使うことを選択するだけかもしれません。例:

//connect to a database using the mysqli adapter 
//for list of other supported adapters see 
//http://framework.zend.com/manual/en/zend.db.html#zend.db.adapter.adapter-notes 
$parameters = array(
        'host'  => 'xx.xxx.xxx.xxx', 
        'username' => 'test', 
        'password' => 'test', 
        'dbname' => 'test' 
        ); 
try { 
    $db = Zend_Db::factory('mysqli', $parameters); 
    $db->getConnection(); 
} catch (Zend_Db_Adapter_Exception $e) { 
    echo $e->getMessage(); 
    die('Could not connect to database.'); 
} catch (Zend_Exception $e) { 
    echo $e->getMessage(); 
    die('Could not connect to database.'); 
} 

//a prepared statement 
$sql = 'SELECT * FROM blah WHERE id = ?'; 
$result = $db->fetchAll($sql, 2); 

//example using Zend_Db_Select 
$select = $db->select() 
      ->from('blah') 
      ->where('id = ?',5); 
print_r($select->__toString()); 
$result = $db->fetchAll($select); 

//inserting a record 
$row = array('name' => 'foo', 
      'created' => time() 
      ); 
$db->insert('blah',$row); 
$lastInsertId = $db->lastInsertId(); 

//updating a row 
$data = array(
    'name'  => 'bar', 
    'updated' => time() 
); 

$rowsAffected = $db->update('blah', $data, 'id = 2');  
+0

私は自分自身にするために期待していたが、私はよく分かりません。 '$ db-> fetchAll($ sql、2);'はmysql_fetch_arrayのように振る舞いますか?また、すべてのスクリプトに存在しなければならない冗長なコードがあるように見えるのはなぜですか?私は、その試行の終わりまですべてを扱う別のクラスを作ることができますか、文をキャッチするか、それは悪い習慣とみなされますか? –

+0

@Jon - fetchAllはデフォルトで連想配列を返します(変更可能、fetchRow、fetchCol、fetchOneなどもあります)。長いtry..catchは、理想的にはブートストラップ(またはインクルードなど)内のアプリケーションに一度しか表示されないので、それは実際問題ではありません。 – karim79

+0

これは私の行く方法のように見えます。あなたのすべての協力に感謝します! –

0

Zend Frameworkをチェックしてください。それは絶対にモジュール式のZend_Dbクラス、特にmysqliアダプターです。

0

は、あなたが実際に既存のライブラリのいずれかを利用とは対照的に、(独自のバージョンを書きたいと思っていると仮定すると、他の回答も示唆しています - それも良いオプションです)...

ここでは、調べるのに役立つ機能がいくつかあります。最初のものは、クエリの結果を連想配列にバインドすることを可能にし、2番目の配列は、2つの配列、1つは順序付けられたキーの配列、もう1つはそれらのキーのデータの連想配列を渡し、準備されたステートメント:

0

これを実行するためのラッパークラスを作成しました。これは、MySQLiまたはPDOのパラメータ化されたクエリと同じインターフェイスを提供します。このインタフェースにより、コード化されたSQLを1行のコードで実行できるため、コードを大幅に簡素化できます。

http://www.robpoyntz.com/blog/?p=191

関連する問題