Pegar Retorno Linhas ou ERRO SQL / sc_begin_trans() / sc_rollback_trans() / sc_commit_trans()

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

2 Curtidas