1

ZF1 Zend_db から ZF2 に移行しています。データベースへの接続と簡単なクエリの作成に問題があります。誰かが私を導くことができれば感謝します。以下は私のコードです。

これは私がdbに接続する方法です

use Zend\Db\Adapter\Adapter;
$dbo = new Zend\Db\Adapter\Adapter(array(
    'driver'   => 'pdo_mysql',
    'database' => DB_PREFIX.DB_NAME,
    'username' => DB_USER,
    'password' => DB_PW
));
Zend_Registry::set('db', $dbo);

これは私がそれをどのように使用するかの例です。

$this->dbo = Zend_Registry::get('db');

function createData($message,$tags,$userid,$imgsrc){
    $data= array(
                      'message' => $message,
                      'tags' => $tags,
                      'imgsrc' => $imgsrc,
                      'createdtimestamp'=>new Zend_Db_Expr('NOW()'),
                      'userid' => $userid);   
    $this->dbo->insert('mydata', $data);
    return $this->dbo->lastInsertId();
}

エラーがあります。つまり、$dbo には select()、insert() メソッドなどはありません。ZF1 zend db で実行できました。

受け取ったエラー メッセージの例:

致命的なエラー: 未定義のメソッド Zend\Db\Adapter\Adapter::select() への呼び出し

4

1 に答える 1

1

ZF2 と ZF1 はクラス互換性がある (そしてそうあるべき) と考えているようです。問題は、そうではないということです - 少なくともZend\Db\Adapter. ZF2 のものははるかに簡潔です。queryメソッドがありますが、主な役割は DB 接続自体を抽象化することです。

あなたが探しているのはZend\Db\Sqlエリアにあると思います。に DB 接続があると仮定すると$dbo、それに基づいて Sql オブジェクトを作成できます。

use Zend\Db\Sql as Sql;
$sql = new Sql\Sql($dbo);

... 次に、(Zend\Db\Sql\Insertクラスの)別のオブジェクトを作成します。

$insert = $sql->insert('mydata');
$insert->values([
   'message' => $message,
   'tags' => $tags,
   'imgsrc' => $imgsrc,
   'createdtimestamp'=>new Sql\Expression('NOW()'),
   'userid' => $userid
]);

...次に、このオブジェクトをクエリで使用します。

$insertString = $sql->getSqlStringForSqlObject($insert);
$results = $dbo->query($insertString, Adapter::QUERY_MODE_EXECUTE);
于 2013-11-06T16:54:40.213 に答える