90 lines
2.7 KiB
PHP
90 lines
2.7 KiB
PHP
|
<?php
|
||
|
|
||
|
function tables(&$link) {
|
||
|
|
||
|
$tables=array();
|
||
|
$res=mysqli_query($link,'SHOW TABLES')
|
||
|
or mexit(mysqli_error($link).N,1);
|
||
|
while ($row=mysqli_fetch_row($res)) {
|
||
|
$resb=mysqli_query($link,'SHOW COLUMNS FROM '.$row[0])
|
||
|
or mexit(mysqli_error($link).N,1);
|
||
|
$fields=array();
|
||
|
// lo uso solo per alcuni tipi, quindi non sto a cercare completezza
|
||
|
while ($rowb=mysqli_fetch_assoc($resb)) {
|
||
|
if (preg_match('/(\w+)\((.*)\)( unsigned)?/',$rowb['Type'],$buf)===1) {
|
||
|
switch ($buf[1]) {
|
||
|
case 'char':
|
||
|
case 'varchar':
|
||
|
$fields[$rowb['Field']]=$buf[2];
|
||
|
break;
|
||
|
case 'tinyint':
|
||
|
if (array_key_exists(3,$buf))
|
||
|
$fields[$rowb['Field']]=array('min'=>0,'max'=>255);
|
||
|
else
|
||
|
$fields[$rowb['Field']]=array('min'=>-128,'max'=>127);
|
||
|
break;
|
||
|
case 'smallint':
|
||
|
if (array_key_exists(3,$buf))
|
||
|
$fields[$rowb['Field']]=array('min'=>0,'max'=>65535);
|
||
|
else
|
||
|
$fields[$rowb['Field']]=array('min'=>-32768,'max'=>32767);
|
||
|
break;
|
||
|
case 'mediumint':
|
||
|
if (array_key_exists(3,$buf))
|
||
|
$fields[$rowb['Field']]=array('min'=>0,'max'=>16777215);
|
||
|
else
|
||
|
$fields[$rowb['Field']]=array('min'=>-8388608,'max'=>8388607);
|
||
|
break;
|
||
|
case 'int':
|
||
|
if (array_key_exists(3,$buf))
|
||
|
$fields[$rowb['Field']]=array('min'=>0,'max'=>4294967295);
|
||
|
else
|
||
|
$fields[$rowb['Field']]=array('min'=>-2147483648,'max'=>2147483647);
|
||
|
break;
|
||
|
// bigint non ci sta in php a meno di usare bcmath o gmp che non è detto siano abilitate sul server, in ogni caso poco importa perché valori bigint vengono usati solo internamente al db, non "vengono da fuori"
|
||
|
case 'bigint':
|
||
|
if (array_key_exists(3,$buf))
|
||
|
$fields[$rowb['Field']]=array('min'=>'0','max'=>'18446744073709551615');
|
||
|
else
|
||
|
$fields[$rowb['Field']]=array('min'=>'-9223372036854775808','max'=>'9223372036854775807');
|
||
|
break;
|
||
|
case 'decimal':
|
||
|
// questo è da testare contro un decimale vero
|
||
|
// fatto, il risultato è che in mysql devo usare decimal(14,4)
|
||
|
if (preg_match('/,/',$buf[2])===1) {
|
||
|
$lim=explode(',',$buf[2]);
|
||
|
} else {
|
||
|
$lim[0]=$buf[2];
|
||
|
$lim[1]=0;
|
||
|
}
|
||
|
$int=$lim[0]-$lim[1];
|
||
|
$sint='';
|
||
|
for ($i=0; $i<$int; $i++)
|
||
|
$sint.='9';
|
||
|
$sdec='';
|
||
|
for ($i=0; $i<$lim[1]; $i++)
|
||
|
$sdec.='9';
|
||
|
$max=$sint.'.'.$sdec;
|
||
|
if (array_key_exists(3,$buf))
|
||
|
$fields[$rowb['Field']]=array('min'=>0,'max'=>floatval($max));
|
||
|
else
|
||
|
$fields[$rowb['Field']]=array('min'=>floatval('-'.$max),'max'=>floatval($max));
|
||
|
break;
|
||
|
default:
|
||
|
$fields[$rowb['Field']]=$rowb['Type'];
|
||
|
break;
|
||
|
}
|
||
|
} elseif ($rowb['Type']=='text') {
|
||
|
$fields[$rowb['Field']]=65535;
|
||
|
} else {
|
||
|
$fields[$rowb['Field']]=$rowb['Type'];
|
||
|
}
|
||
|
}
|
||
|
$tables[$row[0]]=$fields;
|
||
|
}
|
||
|
return($tables);
|
||
|
|
||
|
}
|
||
|
|
||
|
?>
|