Php PDO bindValue codeigniter中的空字符串

Php PDO bindValue codeigniter中的空字符串,php,pdo,duplicates,Php,Pdo,Duplicates,我正在运行insert查询以将用户信息插入数据库。 要插入的字段是用户名和电子邮件,电子邮件字段不是必需的 当输入包含电子邮件时,查询可以正常运行,但当我在电子邮件中未输入任何内容时,PDO错误总是报告错误“键“email”的重复条目”” 首先,正如我在评论中提到的,您需要将email列设置为允许空值。如果您不需要电子邮件地址,那么最好将非电子邮件存储为null而不是空字符串,但在这种情况下,这是必要的,因为列是唯一的 然后,尝试以下代码: $post = $this->input->

我正在运行insert查询以将用户信息插入数据库。 要插入的字段是用户名和电子邮件,电子邮件字段不是必需的

当输入包含电子邮件时,查询可以正常运行,但当我在电子邮件中未输入任何内容时,PDO错误总是报告错误“键“email”的重复条目”


首先,正如我在评论中提到的,您需要将email列设置为允许空值。如果您不需要电子邮件地址,那么最好将非电子邮件存储为null而不是空字符串,但在这种情况下,这是必要的,因为列是唯一的

然后,尝试以下代码:

$post = $this->input->post();
if (!$post['email']){
    $post['email'] = NULL;
}
$sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
$query = $this->db->conn_id->prepare($sql);
$query->execute(array($post['username'], $post['email']));

尝试将空电子邮件插入为
null
而不是
'
它返回“列'email'不能为null”问题是列
电子邮件
设置为唯一,因此不能有两个值为
'
的电子邮件实例。看起来下一个问题是该列也被设置为
非NULL
。由于您不需要电子邮件,请将该列更改为允许空值。然后,如果用户没有输入电子邮件,则将该列设置为null,而不是空字符串。它可以工作。你的解释很有道理。我搔了几个小时的头,试图找出哪里出了问题,谢谢你的帮助。哎呀,我的答案晚了几秒钟-看起来你已经成功了,所以我刚才在下面的答案中发布的代码可能不需要:)无论如何,很高兴你能成功
$post = $this->input->post();
if (!$post['email']){
    $post['email'] = NULL;
}
$sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
$query = $this->db->conn_id->prepare($sql);
$query->execute(array($post['username'], $post['email']));