<?php
declare(strict_types=1);$base=$argv[1]??dirname(__DIR__,4).'/zhctproject/ai_api';require $base.'/vendor/autoload.php';spl_autoload_register(static function($c)use($base){if(strpos($c,'app\\')===0){$p=$base.'/app/'.str_replace('\\','/',substr($c,4)).'.php';if(is_file($p))require $p;}});require __DIR__.'/ReadOnlyPdo.php';$n=0;$must=static function($b)use(&$n){$n++;if(!$b)throw new RuntimeException('Gate test '.$n);};
foreach(['SELECT 1','SELECT * FROM yoshop_user WHERE nick_name=\'INSERT 中文\'','SHOW FULL COLUMNS FROM `yoshop_user`'] as $sql)$must(is_string(ReadSqlGate::sql($sql)));
ReadSqlGate::call('CALL SP_TABLEDEF(?, ?)',['AIZHCT_APP','YOSHOP_USER']);$must(ReadSqlGate::sql('CALL SP_TABLEDEF(?, ?)')==='metadata_CALL');ReadSqlGate::$callContext=false;
foreach(['INSERT INTO yoshop_user VALUES(1)','UPDATE yoshop_user SET points=0','DELETE FROM yoshop_user','CREATE TABLE X(A INT)','ALTER TABLE yoshop_user ADD x INT','DROP TABLE yoshop_user','CALL OTHER(?, ?)','CALL SP_TABLEDEF(?, ?)','DO 1','SELECT 1; SELECT 2','SELECT * INTO OUTFILE \'x\' FROM yoshop_user','SELECT * FROM yoshop_payment','SELECT * FROM ZHCT_APP.yoshop_user','SELECT SLEEP(1)','SHOW FULL COLUMNS FROM `other_table`','SHOW TABLES','SELECT 1 -- injected','SELECT 1 /* hidden */'] as $sql){$denied=false;try{ReadSqlGate::sql($sql);}catch(RuntimeException $e){$denied=true;}$must($denied);}
foreach([['ZHCT_APP','YOSHOP_USER'],['AIZHCT_APP','YOSHOP_PAYMENT'],['AIZHCT_APP',"YOSHOP_USER;X"],[['AIZHCT_APP',PDO::PARAM_INT],'YOSHOP_USER']] as $b){$denied=false;try{ReadSqlGate::call('CALL SP_TABLEDEF(?, ?)',$b);}catch(RuntimeException $e){$denied=true;}$must($denied);}echo json_encode(['pure_sql_guard_assertions'=>$n,'HTTP'=>0,'DML'=>0,'DDL'=>0]),"\n";
