【发布时间】:2014-04-02 23:11:46
【问题描述】:
我的网页在接受来自 PHP 表单的空白数据并将它们提交到我的表时遇到问题,即使我将每个表中的所有列都设置为 NOT NULL。我是否误解了 NOT NULL 的含义,还是我做错了其他事情(可能与注射预防有关)?
这是我创建表格的方式:
CREATE TABLE USER(
user_ID int(5) NOT NULL AUTO_INCREMENT,
username char(25) NOT NULL,
PRIMARY KEY (user_ID));
这是输入页面以防万一:
<?php
echo "<form action='adduser.php' method='post'>
<input type='text' name='username'/>
<input type='submit'/>";
?>
验证页面:(adduser.php)
<?php
$name=$_POST['username'];
$name=stripslashes($name);
$name=mysql_real_escape_string($name);
if(mysql_query("INSERT INTO User VALUES ('','$name');")
echo "Entry successful";
else
echo "Invalid entry: ".mysql_error();
?>
无论我在文本框中输入什么,输入都是成功的。我是 SQL 新手,所以我犯的这个基本错误是什么?
【问题讨论】:
-
顺便说一句,您不需要使主键不为空 - 它是隐式完成的。
-
那么
user_id列的结果是什么? -
零长度字符串与 NULL 不同。 INSERT 中 user_id 的零长度字符串被评估为整数值,MySQL 将其视为 0,这会触发该列上的 AUTO_INCREMENT 行为。零长度字符串对用户名列有效,因此插入成功。您可能需要考虑在 user_name 列上添加一个 UNIQUE KEY 约束,这样就不会有两行具有相同的 user_name。 (很高兴看到真正使用的转义字符串函数;当 PDO 和 mysqli 可用时,使用的 mysql_ 接口不太好。)
标签: php mysql null create-table