我正在制定验证程序。验证需要能够接受变量和 mysql 数据类型,如果变量对于给定的 mysql 数据类型有效,则返回 true。
示例
$price = 1000
$type = "datetime"
这应该返回 false
$price = 789
$type = "int(11)"
这应该返回 true。
我最初的计划是使用 DESCRIBE [TABLE] 查询数据库中选定的表,并检索其字段及其数据类型。
例如
Code | char(9)
Name |text
Age |int
然后我想验证 json 字符串中的值并确保解析的数据对于给定的表有效。
Code: ONE12345
Name: Jimmy1
Age: fifty
如有任何帮助,我们将不胜感激!提前致谢。
最佳答案
如果您进行谷歌搜索,应该会显示许多 PHP 验证类。做一些研究来选择最适合您需求的:)
或者你可以自己编写。这是我几年前写的。
function validateInputs($fields){
foreach ($fields as $field => $fieldInfo){
foreach (explode(',', $fieldInfo[1]) as $ruleString) {
$ruleOp = explode('|', $fieldInfo[1]);
$rule = $ruleOp[0];
$op = isset($ruleOp[1]) ? $ruleOp[1] : '';
$val = isset($ruleOp[2]) ? $ruleOp[2] : false;
switch ($rule) {
case 'required':
if(!isset($_POST[$field] || (isset($_POST[$field] && $_POST[$field] == '')){
throw new Exception ($fieldInfo[0].' is required');
}
break;
case 'requiredif':
if(!isset($_POST[$op] || (isset($_POST[$op] && $_POST[$op] == '')
&& !isset($_POST[$field] || (isset($_POST[$field] && $_POST[$field] == '' && $val == false)
|| ($val !== false && isset($_POST[$op] && $_POST[$op] === $val && isset($_POST[$op] && $_POST[$op] == '')){
throw new Exception ($fieldInfo[0].' needs a value');
}
break;
case 'email':
if(isset($_POST[$field] && !filter_var($_POST[$field], FILTER_VALIDATE_EMAIL)){
throw new Exception ($fieldInfo[0].' is not a valid email');
}
break;
case 'match':
if(isset($_POST[$field] && isset($_POST[$op]
&& $_POST[$field] != $_POST[$op]){
throw new Exception ($fieldInfo[0].' should match with `'.$fields[$op][0].'`');
}
break;
case 'file':
if(isset($_POST[$field] && !$_POST[$field] instanceof stdClass){
throw new Exception ($fieldInfo[0].' is not a valid file');
}
break;
}
}
}
}
我就是这么调用它的。
try{
validateInputs(array(
'name' => array('Username', 'required'),
'email' => array('Email', 'required|email')
));
}
catch(Exception $e){
echo $e->getMessage();
}
关于PHP MYSQL 验证变量是数据库类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28560401/