<?php
class CDXStatement extends PDOStatement {
 private $bound=[];protected function __construct(){}
 public function bindValue($key,$value,$type=PDO::PARAM_STR){$this->bound[(string)$key]=['value'=>$value,'type'=>$type];return parent::bindValue($key,$value,$type);}
 public function execute($params=null){$sql=$this->queryString;if(!preg_match('/^\s*(SELECT|SHOW|EXPLAIN)\b/i',$sql)&&trim($sql)!=='CALL SP_TABLEDEF(?, ?)')throw new RuntimeException('Native read-only gate');$n=count($GLOBALS['CDX_PREPARED']??[]);$GLOBALS['CDX_PREPARED'][$n]=['queryString'=>$sql,'bindings'=>$this->bound,'execute_parameters'=>$params];try{$ok=parent::execute($params);$GLOBALS['CDX_PREPARED'][$n]['ok']=$ok;return $ok;}catch(Throwable $e){$GLOBALS['CDX_PREPARED'][$n]['error']=['class'=>get_class($e),'message'=>$e->getMessage()];throw $e;}}
}
