PHP MYSQL 验证变量是数据库类型

标签 php mysql validation types

我正在制定验证程序。验证需要能够接受变量和 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/

相关文章:

python - 如何在 Django 中处理来自 MySQL 的 "partial"日期(2010-00-00)?

Mysql:优化从多个范围中选择行(使用索引?)

mysql - 可以在内存中模拟mysql服务器吗?

java - Struts 2中如何通过XML配置来配置@SkipValidation

c++ - 如何修复不会在退出选择时终止的 do-while 循环

php - 简单表单未提交到数据库 PHP MySQL

wordpress - PHP 警告 : POST Content-Length of 8978294 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

php - 加入 MySQL 和关系表错误

javascript - 在纯 JavaScript 的表单输入中输入时如何禁止特定字符?

php - 多个变量作为表名