Запросы могут быть выполнены с помощью execute()
и query()
методами. execute()
Метод возвращает количество строк , затронутых в то время как query()
метод возвращает результат как PDOStatement
<?php
use Phinx\Migration\AbstractMigration;
class MyNewMigration extends AbstractMigration
{
/**
* Migrate Up.
*/
public function up()
{
// execute()
$count = $this->execute('DELETE FROM users'); // returns the number of affected rows
// query()
$stmt = $this->query('SELECT * FROM users'); // returns PDOStatement
$rows = $stmt->fetchAll(); // returns the result as an array
}
/**
* Migrate Down.
*/
public function down()
{
}
}
Эти команды выполняются с использованием расширения PHP Data Objects (PDO), которое определяет легкий, согласованный интерфейс для доступа к базам данных в PHP. Перед использованием
execute()
команды всегда убедитесь, что ваши запросы соответствуют PDO . Это особенно важно при использовании DELIMITER во время вставки хранимых процедур или триггеров, которые не поддерживают DELIMITER.
При использовании
execute()
илиquery()
с пакетом запросов PDO не генерирует исключение, если есть проблема с одним или несколькими запросами в пакете.Таким образом, предполагается, что вся партия прошла без проблем.
Если бы Phinx перебирал любые потенциальные наборы результатов, пытаясь увидеть, есть ли в них ошибка, тогда Phinx отказывал бы в доступе ко всем результатам, поскольку в PDO нет возможности получить предыдущий набор результатов nextRowset () - но нет
previousSet()
).Таким образом, как следствие, из-за проектного решения в PDO не генерировать исключение для пакетных запросов, Phinx не может обеспечить наиболее полную поддержку обработки ошибок при предоставлении пакетов запросов.
К счастью, доступны все функции PDO, поэтому в процессе миграции можно управлять несколькими пакетами, вызывая nextRowset () и проверяя errorInfo .
0 комментариев