Как выполнить цикл в наборе результатов mysql в режиме без жира?

Я новичок в php fat-free framework, и я пытаюсь выяснить, как выполнить цикл моих результатов запроса mysql или, еще лучше, получить его как ассоциативный массив (только для учебных целей).

То, что я сделал до сих пор,

while(!$users->dry()){ array_push($user_assoc,$users->cast()); $users->next(); } 

Это работает, но мне было интересно, есть ли лучший способ сделать это? Также как настроить обработчик ошибок? Я имею в виду, как я могу проверить, были ли в запросе какие-либо ошибки (то есть mysql_error() эквивалент mysql_error() )?

Запрос БД

Для выполнения результатов db существует 3 варианта:

Без картографа:

Выполните SQL-запрос и извлеките результирующий набор как массив ассоциативных массивов:

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

С mapper-> load:

Выбирайте ряды картографов один за другим (ваш метод):

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

С mapper-> find:

Извлеките результирующий набор в виде массива карт:

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

Обработка ошибок DB

\ DB \ SQL является подклассом PDO, поэтому он может генерировать захватывающие исключения PDO. Поскольку они по умолчанию отключены, вам необходимо сначала включить их. Это можно сделать двумя разными способами:

  • во время инстанцирования, для всех транзакций:

    $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-mappers, поскольку они полагаются на один и тот же класс 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 } 

Вы уже используете правильный путь. По крайней мере, если вы хотите использовать картограф. С помощью SQL-класса напрямую возвращается ассоциативный массив. В основном все, что связано с этим, описано здесь http://fatfreeframework.com/databases#querying-the-database

 $result = $db->exec('SELECT * FROM users'); print_r($result); 

Если вы ищете ошибки или хотите узнать, что было выполнено, используйте $db->log(); , http://fatfreeframework.com/databases#profiling