插入sql语句中的错误

时间:2017-09-22 08:41:02

标签: php sql-server mysqli

这是注册表格请帮助我解决此错误

错误:无法执行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);
?>

4 个答案:

答案 0 :(得分:2)

它在您的错误消息中说明列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

的效果

答案 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_idautoincrement 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_idautoincrement id customer表,那么您无法在SQL语句中将null设置为它。