Amigos,
As vezes precisamos utilizar o rollback nas transações SQL no Scriptcase e precisamos
pegar o retorno se o UPDATE / DELETE que passamos para ser executado no
Banco de Dados conseguiu ser executado corretamente, como no Scriptcase as
macros padrão não retornam o resultado, usei este código em PDO nativo com base
MySQL/MariaDB que faz exatamente isso, ele pega nativamente os dados que já
estão disponíveis nas variáveis de SESSÃO do Scriptcase se integrando harmonicamente
ao código do Scriptcase.
// SQL a ser executada.
$sql = "
DELETE
FROM
teste
WHERE
ProdutoID = 1
";
$_Conexao_Base = $this->Db->host . ';dbname=' .$this->Db->database;
$_Usuario = $this->Db->user;
$_Senha = $this->Db->password;
$_Base_Ativa = new PDO($_Conexao_Base, $_Usuario, $_Senha);
// Iniciamos a TRAVA de TRANSAÇÕES.
$_Base_Ativa->beginTransaction();
$_Numero_Linhas_Afetadas = $_Base_Ativa->exec($sql);
$_Erro_SQL = $_Base_Ativa->errorInfo();
if (!empty(trim($_Erro_SQL[2]))) {
echo 'ERRO SQL: '.$_Erro_SQL[2]."</br>";
// Nenhuma Linha Afetada extornando Todas as TRANSAÇÕES.
$_Base_Ativa->rollBack();
} else {
if (false === $_Numero_Linhas_Afetadas) {
// Nenhuma Linha Afetada extornando Todas as TRANSAÇÕES.
echo 'No Linhas Afetadas ='.$_Numero_Linhas_Afetadas."</br>";
$_Base_Ativa->rollBack();
} else {
// Finalizamos a TRAVA de TRANSAÇÃO gravando todos os DADOS no banco de dados.
echo 'No Linhas Afetadas ='.$_Numero_Linhas_Afetadas."</br>";
$_Base_Ativa->commit();
}
}
Quando houver erro ele já retorna com a mensagem nativa desta tabela do comando PDO:
here are the error codes, straight from their site:
The error codes for SQLite version 3 are unchanged from version 2. They are as follows:
#define SQLITE_OK 0 /* Successful result /
#define SQLITE_ERROR 1 / SQL error or missing database /
#define SQLITE_INTERNAL 2 / An internal logic error in SQLite /
#define SQLITE_PERM 3 / Access permission denied /
#define SQLITE_ABORT 4 / Callback routine requested an abort /
#define SQLITE_BUSY 5 / The database file is locked /
#define SQLITE_LOCKED 6 / A table in the database is locked /
#define SQLITE_NOMEM 7 / A malloc() failed /
#define SQLITE_READONLY 8 / Attempt to write a readonly database /
#define SQLITE_INTERRUPT 9 / Operation terminated by sqlite_interrupt() /
#define SQLITE_IOERR 10 / Some kind of disk I/O error occurred /
#define SQLITE_CORRUPT 11 / The database disk image is malformed /
#define SQLITE_NOTFOUND 12 / (Internal Only) Table or record not found /
#define SQLITE_FULL 13 / Insertion failed because database is full /
#define SQLITE_CANTOPEN 14 / Unable to open the database file /
#define SQLITE_PROTOCOL 15 / Database lock protocol error /
#define SQLITE_EMPTY 16 / (Internal Only) Database table is empty /
#define SQLITE_SCHEMA 17 / The database schema changed /
#define SQLITE_TOOBIG 18 / Too much data for one row of a table /
#define SQLITE_CONSTRAINT 19 / Abort due to contraint violation /
#define SQLITE_MISMATCH 20 / Data type mismatch /
#define SQLITE_MISUSE 21 / Library used incorrectly /
#define SQLITE_NOLFS 22 / Uses OS features not supported on host /
#define SQLITE_AUTH 23 / Authorization denied /
#define SQLITE_ROW 100 / sqlite_step() has another row ready /
#define SQLITE_DONE 101 / sqlite_step() has finished executing */
PHP: PDO::errorInfo - Manual