Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để lặp qua tập kết quả mysql trong khung công tác fatfree?

Truy vấn DB

Có 3 biến thể để lặp qua kết quả db:

Không có trình lập bản đồ:

Thực thi truy vấn SQL và tìm nạp tập kết quả dưới dạng một mảng các mảng kết hợp:

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

Với trình lập bản đồ-> tải:

Tìm nạp từng hàng của trình ánh xạ (phương pháp của bạn):

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

With mapper-> find:

Tìm nạp tập hợp kết quả dưới dạng một mảng các trình ánh xạ:

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

Xử lý lỗi DB

\ DB \ SQL là một lớp con của PDO nên nó có thể ném các ngoại lệ PDO có thể bắt được. Vì những tính năng này bị tắt theo mặc định, trước tiên bạn cần bật chúng lên. Điều này có thể được thực hiện theo 2 cách khác nhau:

  • tại thời điểm khởi tạo, cho tất cả các giao dịch:

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

  • sau này trong mã, trên cơ sở mỗi giao dịch:

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

Sau khi các ngoại lệ PDO được bật, chỉ cần bắt chúng như các ngoại lệ khác:

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)
}

Điều này cũng hoạt động với các trình ánh xạ DB, vì chúng dựa trên cùng một lớp DB \ SQL:

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuỗi con MySQL giữa hai chuỗi

  2. thay đổi định dạng ngày MySql

  3. Hai chỉ mục một cột so với một chỉ mục hai cột trong MySQL?

  4. Tối ưu hóa hiệu suất truy vấn trong MySQL

  5. Loại cột nào nên được sử dụng để lưu trữ dữ liệu được tuần tự hóa trong db mysql?