[英]error in insert sql statement
这是注册表格,请帮助我解决此错误
错误:无法执行sql插入语句
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);
?>
它在您的错误消息中说, 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
的性能
您需要在查询中传递customer_id
而不是null
,例如:
$sql="INSERT INTO customer(customer_id,customer_name,customer_email,customer_password)
VALUES ('$customer_id','$customer_name','$customer_email','$customer_password')";
您可以按如下所示删除customer_id列,
$sql="INSERT INTO customer(customer_name,customer_email,customer_password)
VALUES ('$customer_name','$customer_email','$customer_password')";
如果将customer_id设置为数据库中的自动增量,则无需在查询中包括它
如果您的customer_id
是customer
表的autoincrement id
,则无需将其放在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
在默认值中添加you have not put anything
,那么它将不允许您在该字段中插入null 。 为此,您需要将默认值设置为NULL
。
情况二
如果您的customer_id
是customer
表的autoincrement id
,则在SQL语句期间不能在其中设置null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.