假设字段数据类型为varchar当我在其中添加一个整数时,它会发布并添加为字符串,
并假定字段数据类型为int当我在其中添加varchar时,它会将其作为"0"发布并添加到数据库中,
那么,是否有任何方法可以检查数据类型是否等于数据库中的数据类型?
我只想检查varchar、integer和boolean
谢谢
//get column name
try {
$q = $conn->prepare("DESCRIBE subscriber");
$q->execute();
$tableField = $q->fetchAll(PDO::FETCH_COLUMN);
}
catch(PDOException $e)
{
die ($e->getMessage()."<a href='view.php' onClick='window.location.reload()'> Back</a>");
}
foreach ($tableField as $set)
{$counter=0;
//if ($set!='Email')
$subCol[]=$set; //column name
$noOfColumn[]=$counter; //how much column
}
//get column datatype
foreach ($noOfColumn as $set)
{
try{
$sql ='SELECT s.*
FROM subscriber s,list_sub ls
where ls.ListID = ?
AND s.SubID=ls.SubID
';
$select = $DB->query($sql);
$meta = $select->getColumnMeta($set);
$dataType[]=$meta[$subCol['$set']]; //an arrary of datatype
}
catch(PDOException $e)
{
die ($e->getMessage().'<a href="viewAll.php"> Back</a>');
}
}
//assume input1='int' , input2='varchar' ,input3='bool'
//column name in database = input box name
foreach ($dataType as $compare)
{if($compare[$subCol['FieldName']]==gettype(mixed $input1))
echo "ok, same type";
else
echo "no, not same type";
}
我认为这种自动验证没有意义
尤其是前一个。
您必须实现应用程序级别的验证,检查值是否满足某些条件。
顺便说一句,Mysql没有布尔字段类型。
您可以使用(实验)PDOStatement::getColumnMeta(int $column)
方法,如下所述:http://php.net/manual/en/pdostatement.getcolumnmeta.php.
与这里介绍的PHP的gettype(mixed $var)
函数进行比较:http://php.net/manual/en/function.gettype.php