我可以部分填充表而不是填充表中的所有列吗?

时间:2017-02-28 17:13:17

标签: mysql

我是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

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:0)

当您查看数据库结构并在“NULL”下看到“NO”时,这意味着不允许使用NULL值。

因此,当您尝试将数据插入到表中时,并且它没有看到不允许为空的列的数据时,它就会变形并死亡。

将数据库更改为允许除用户名,密码和加入日期之外的所有内容的NULL值,它应该可以正常工作。

答案 1 :(得分:0)

Null设置为NO - 表示该字段不能为空。必须要有东西放在那里。 如果要更改此行为,请将NULL值更改为YES。

主键不能为空。

默认值可以保留为空,除非您特别想在插入语句中未输入任何其他内容时在字段中添加值。