sql >> データベース >  >> RDS >> Mysql

fatfreeフレームワークでmysql結果セットをループするにはどうすればよいですか?

    DBクエリ

    dbの結果をループする3つのバリアントがあります:

    マッパーなし:

    SQLクエリを実行し、結果セットを連想配列の配列としてフェッチします。

    $users = $db->exec('SELECT * FROM users');
    foreach($users as $user)
      echo $user['name'];//associative array
    

    マッパー付き->ロード:

    マッパーの行を1つずつフェッチします(メソッド):

    $user=new \DB\SQL\Mapper($db,'users');
    $user->load('');
    while(!$user->dry()) {
      echo $user->name;//db mapper
      $user->next();
    }
    

    マッパー付き->検索:

    結果セットをマッパーの配列として取得します:

    $mapper=new \DB\SQL\Mapper($db,'users');
    $users=$mapper->find('');
    foreach($users as $user)
      echo $user->name;//db mapper
    

    DBエラー処理

    \ DB \ SQLはPDOのサブクラスであるため、キャッチ可能なPDO例外をスローできます。これらはデフォルトで無効になっているため、最初に有効にする必要があります。これは2つの異なる方法で行うことができます:

    • インスタンス化時に、すべてのトランザクションについて:

      $db = new \DB\SQL($dsn, $user, $pwd, array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION ));

    • コードの後半で、トランザクションごとに:

      $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

    PDO例外を有効にしたら、他の例外としてそれらをキャッチします。

    try {
      $db->exec('INSERT INTO mytable(id) VALUES(?)','duplicate_id');
    } catch(\PDOException $e) {
      $err=$e->errorInfo;
      //$err[0] contains the error code (23000)
      //$err[2] contains the driver specific error message (PRIMARY KEY must be unique)
    }
    

    同じDB\SQLクラスに依存しているため、これはDBマッパーでも機能します。

    $db=new \DB\SQL($dsn,$user,$pwd,array(\PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION));
    $mytable=new \DB\SQL\Mapper($db,'mytable');
    try {
      $mytable->id='duplicate_id';
      $mytable->save();//this will throw an exception
    } catch(\PDOException $e) {
      $err=$e->errorInfo;
      echo $err[2];//PRIMARY KEY must be unique
    }
    


    1. その場でテーブルを作成するためのデータベース設計

    2. RLIKE演算子がMySQLでどのように機能するか

    3. OracleのTZ_OFFSET()関数

    4. 2つの日付の間の各日付のレコード数を計算します