PHP / MYSQL整数字段ZERO给出错误

时间:2018-03-31 01:20:51

标签: php mysql

我认为这应该很简单,但我不能理解为什么会发生这种错误。

我有一个如下数据库:

Field: id
Type: int(4) (AUTO INCREMENT)

Field: Name
Type varchar(30)

Field: Age
Type: int(3)

每次我在我的html表单上将Age字段留空时,在尝试插入数据库时​​会出现错误。

$name = $_POST['name'];
if (!isset($_POST['age'])) {
    $age = 0;
} else {
    $age = mysql_prep($_POST['age']);
}

INSERT INTO tage (name, age) VALUES ('$name', $age)

打印查询,它给了我:

INSERT INTO tage (name, age) VALUES ('John',)

我得到的错误如下:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“')'附近使用正确的语法。

当然这是一个示例数据库。

如果我在html表单上实际输入0(数字零),它可以正常工作,但如果我将其留空,则会出现错误,似乎我无法将0分配给var $ age。

编辑:值得一提的是,我确实在数据库中设置了字段年龄,默认值为NULL(使用phpmyadmin)。

感谢任何反馈。

只是最后一次编辑,所以人们没有错误的印象,这是示例代码中使用的函数mysql_prep():

function mysql_prep( $value ) {
    global $connection;
    $magic_quotes_active = get_magic_quotes_gpc();
    $new_enough_php = function_exists( "mysqli_real_escape_string" );
    if( $new_enough_php ) { // PHP v4.3.0 or higher
        if( $magic_quotes_active ) { $value = stripslashes( $value ); }
        $value = mysqli_real_escape_string( $connection, $value );
    } else { // before PHP v4.3.0
        if( !$magic_quotes_active ) { $value = addslashes( $value ); }
    }
    return $value;
}

问题现在已经解决了,问题是我错误地认为没有发布空字段。

1 个答案:

答案 0 :(得分:2)

如果您没有在表单中输入值,它仍然会发送$_POST['age'],但它只是空的。

您应该像这样更改代码:

if (empty($_POST['age']) || !is_numeric($_POST['age'])) {
    $age = 0;
} else {
    $age = (int) mysql_prep($_POST['age']);
}

然后研究使用准备好的查询,因为$name = $_POST['name'];对SQL注入是开放的。