我是php和mysql的新手,我正在读一本书。我正在尝试将一些信息插入到数据库中,但我意识到只有当下面的查询和数据库包含完全相同的列时,表才会填充。
例如,这有效:
$query2 = "INSERT INTO mismatch_user (username, password, join_date) VALUES ('$username', SHA('$password1'), NOW())";
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| user_id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(40) | NO | | | |
| password | varchar(40) | NO | | | |
| join_date | date | NO | | NULL | |
当我在此表上运行此查询时,它没有问题。
但是,如果我向表中添加更多列,则运行相同的查询,但它不起作用。
例如,这不起作用:
$query2 = "INSERT INTO mismatch_user (username, password, join_date) VALUES ('$username', SHA('$password1'), NOW())";
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| user_id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(40) | NO | | | |
| password | varchar(40) | NO | | | |
| join_date | date | NO | | NULL | |
| first_name | varchar(40) | NO | | | |
| last_name | varchar(40) | NO | | | |
| gender | varchar(1) | NO | | | |
| birthdate | date | NO | | NULL | |
| city | varchar(40) | NO | | | |
| state | varchar(2) | NO | | | |
| picture | varchar(40) | NO | | | |
+------------+-------------+------+-----+---------+----------------+
一切都运行成功,我检查错误日志没有错误,但用户仍然没有在数据库中创建。这是一个合法的问题还是这个问题特定于我的设置?
PS:整个网站只有在我连接127.0.0.1时才有效,如果我使用localhost代替127.0.0.1没有任何效果,但除了我上面的问题,查询问题一切正常。如果它对我的版本和操作系统有帮助:
PHP版本:PHP 5.6.29
MySql版本:mysql Ver 14.14 Distrib 5.7.16
操作系统:MacOS Sierra版本10.12.1
非常感谢所有帮助。
答案 0 :(得分:0)
当您查看数据库结构并在“NULL”下看到“NO”时,这意味着不允许使用NULL值。
因此,当您尝试将数据插入到表中时,并且它没有看到不允许为空的列的数据时,它就会变形并死亡。
将数据库更改为允许除用户名,密码和加入日期之外的所有内容的NULL值,它应该可以正常工作。
答案 1 :(得分:0)
Null设置为NO - 表示该字段不能为空。必须要有东西放在那里。 如果要更改此行为,请将NULL值更改为YES。
主键不能为空。
默认值可以保留为空,除非您特别想在插入语句中未输入任何其他内容时在字段中添加值。