【问题标题】:MySQL NOT NULL not working with PHPMySQL NOT NULL 不适用于 PHP
【发布时间】: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。 (很高兴看到真正使用的转义字符串函数;当 PDOmysqli 可用时,使用的 mysql_ 接口不太好。)

标签: php mysql null create-table


【解决方案1】:

NULL 和空字符串 '' 是有区别的。数据库中设置为 NOT NULL 的字符字段仍将接受空字符串。在这种情况下,表单会向您的验证页面发布一个空字符串,然后将其插入数据库中。

在继续插入数据库之前,您的验证页面需要检查字符串是否为空。

【讨论】:

  • OP 可能还想在 user_name 列上添加唯一约束;并考虑使用 PDOmysqli 代替已弃用的 mysql_ 接口。
猜你喜欢
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 2018-12-19
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多