繁体   English   中英

插入SQL语句中的错误

[英]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_idnull 因此,您必须更改为数据库表结构或查询。 由于它是关于ID的,因此建议您更改查询。

如果customer_id是自动递增的字段,则不应设置该字段(将其从查询中删除)

编辑:

通常不会将标识符设置为varchar。 看到诸如customer_id ,大多数人就可以假设他们正在处理整数。 最简单的方法是使该表列成为数据库中具有自动增量的整数(在大多数情况下,该字段也将是主键)。 看到您的表需要字段customer_id ,则不能将其从查询中删除,您将不得不为您的客户生成/创建适当的标识符。 当前表结构的解决方法:

$sql="
INSERT INTO 
    customer
    (customer_id,customer_name,customer_email,customer_p‌​‌​assword) 
VALUES (
(select count(customer_id) from customer)+1,'$customer_name','$customer_email','$customer_pa‌​ssword‌​')";

编辑2:有关数据库列数据类型的一些其他信息: mysql char vs. varcharmysql integer

如果以后有一个更复杂的数据库并一次查询多个表以收集数据,则必须依靠索引和位置(外键)来快速获得结果。 IE:加入customer_id相当慢。 将其设置为char可以使它更快地运行,因为varchar的长度可变。 我尚未测试有关charinteger的性能

您需要在查询中传递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_idcustomer表的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_idcustomer表的autoincrement id ,则在SQL语句期间不能在其中设置null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM