我认为这应该很简单,但我不能理解为什么会发生这种错误。
我有一个如下数据库:
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;
}
问题现在已经解决了,问题是我错误地认为没有发布空字段。
答案 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注入是开放的。