这是注册表格请帮助我解决此错误
错误:无法执行sql insert语句
INSERT INTO customer(customer_id,customer_name,customer_email,customer_password) VALUES (null,'','','').Column 'customer_id' cannot be null
//check connection
if($link===false){
die("ERROR: could not connect. " . mysqli_connect_error());
}
//Escape user inputs for security
$customer_id = mysqli_real_escape_string($link, $REQUEST['customerid']);
$customer_name = mysqli_real_escape_string($link, $REQUEST['Name']);
$customer_email = mysqli_real_escape_string($link, $REQUEST['Email']);
$customer_password = mysqli_real_escape_string($link, $REQUEST['Password']);
//attempt insert query execution
$sql="INSERT INTO customer(customer_id,customer_name,customer_email,customer_password) VALUES (null,'$customer_name','$customer_email','$customer_password')";
if(mysqli_query($link,$sql)){
echo "records added successfully.";
} else{
echo "ERROR: Could not able to execute $sql.".mysqli_error($link);
}
mysqli_close($link);
?>
答案 0 :(得分:2)
它在您的错误消息中说明列customer_id
不能为空。
查看查询VALUES (null,'$customer_name','$customer_email','$customer_password')";
,值在括号后面开始。因此,您的第一列为customer_id
,第一列为null
。
错误消息告诉您,您的表格未设置为允许customer_id
为null
。因此,您必须更改为数据库表结构或查询。由于它是关于ID,我建议您更改您的查询。
如果customer_id
是自动递增字段,则不应设置它(将其从查询中删除)
修改:
将标识符设置为varchar通常是不常见的。看到像customer_id
这样的东西让大多数人都认为他们正在处理一个整数。最简单的方法是使该表列成为数据库中自动增量的整数(在大多数情况下,这样的字段也是主键)。
看到您的表格需要字段customer_id
,您的查询不会被遗漏,您必须为您的客户生成/创建足够的标识符。当前表结构的解决方法:
$sql="
INSERT INTO
customer
(customer_id,customer_name,customer_email,customer_password)
VALUES (
(select count(customer_id) from customer)+1,'$customer_name','$customer_email','$customer_password')";
编辑2: 有关数据库列数据类型的一些其他信息:mysql char vs. varchar和mysql integer
如果您以后拥有更复杂的数据库并一次查询多个表来收集数据,则必须依赖索引和实际(外键)来快速获得结果。 IE:在你的customer_id
上加入是相当慢的。将其设置为char可使其运行更快,因为varchar具有可变长度。我尚未测试有关char
和integer
答案 1 :(得分:0)
您需要在查询中传递customer_id
而不是null
,例如:
$sql="INSERT INTO customer(customer_id,customer_name,customer_email,customer_password)
VALUES ('$customer_id','$customer_name','$customer_email','$customer_password')";
答案 2 :(得分:0)
您可以删除customer_id列,如下所示
$sql="INSERT INTO customer(customer_name,customer_email,customer_password)
VALUES ('$customer_name','$customer_email','$customer_password')";
如果在数据库中将customer_id设置为自动增量,则无需将其包含在查询
中答案 3 :(得分:0)
如果您的customer_id
是autoincrement id
表的customer
,则无需将其放在 INSERT 语句中。
只需在没有customer_id的情况下运行
$sql="INSERT INTO customer(customer_name,customer_email,customer_password)
VALUES ('$customer_name','$customer_email','$customer_password')";
确定。让我向你解释一些事情。
案例1:
如果您的 customer_id 是整数类型且默认值为you have not put anything
,则 不允许 您要在该字段中插入 null 。为此,您需要将默认值设置为NULL
。
案例2
如果您的customer_id
是autoincrement id
customer
表,那么您无法在SQL语句中将null设置为它。