PHP,pdo,当输入为空时如何向mysql插入NULL,否则输入值为空
这是tbl_temp表:PHP,pdo,当输入为空时如何向mysql插入NULL,否则输入值为空,php,mysql,pdo,Php,Mysql,Pdo,这是tbl_temp表: id(pri unique) name(unique, null able) 1 abc 2 null 3 eadf 4 null 5 null 这是插入函数: $stmt = $this->conn->prepare("INSERT INTO tbl_temp (i
id(pri unique) name(unique, null able)
1 abc
2 null
3 eadf
4 null
5 null
这是插入函数:
$stmt = $this->conn->prepare("INSERT INTO tbl_temp (id, name) values (:id, :name);
$stmt->bindParam(':id', $this->id, PDO::PARAM_INT);
$stmt->bindParam(':name', $this->name);
$stmt->execute();
这是插入函数的视图
<from action='' method='post'>
<input type='text' name='name'>
<input type='submit' />
</form>
现在,如果输入名称的值为空,它应该将null分配给bindParam->name,但是它在这里分配的值为0,这会导致重复错误。如果它提供null,那么就可以了,因为mysql可以在unique上设置null,但不能设置为零
$name = $this->name;
if(empty($name)){
$name = null;
}
$stmt = $this->conn->prepare("INSERT INTO tbl_temp (id, name) values (:id, :name)");
$stmt->bindParam(':id', $this->id, PDO::PARAM_INT);
$stmt->bindParam(':name', $name);
$stmt->execute;
首先,将
id
列设置为自动递增,其次,将语句更改为
"INSERT INTO tbl_temp (name) values (:name);"
如果不使用id,为什么不自动递增它
最后,像这样使用它:
$stmt = $this->conn->prepare("INSERT INTO tbl_temp (name) values (:name);")
$name = $this->name;
if($name == ""){
$stmt->bindValue(':name', null, PDO::PARAM_STR);
} else{
$stmt->bindParam(':name', $this->name, PDO::PARAM_STR);
}
$stmt->execute();
如果您不想更改表,我建议您这样做,但基本上如果您想设置null,只需使用bindValue(':name',null,PDO::PARAM_STR)代码>MySQL(5.6+)有一个函数NULL如果(a,b)
其中如果a=b则返回NULL,否则返回a
INSERT INTO table (a,b,c) VALUES (123,NULLIF('$field',''),'xyz')
如果$field变量为空('
),它将返回NULL,否则返回$field
您可以手动执行此操作,就像在“$field”=''时手动执行一样,然后在其他“$field”结束时手动执行空操作
甚至
$stmt->bindValue(':name', $this->name?:null, PDO::PARAM_NULL);
(请注意,上述示例并非转义的、不安全的,只是一个使用示例)-1,为什么??你能解释一下这不是真正的代码吗。1.它包含语法错误。2.它不包含为名称变量指定0的代码。请检查字段是否为空,否则请插入值或插入空值。这是您的网站,我的意思是它属于您。??当我告诉您发布真实代码时,这不是我个人的心血来潮。我只是告诉你网站规则。你愿意自己读吗?这个自动递增的东西和这个问题有什么关系?我同意迪玛的观点。问题中的id列是:
id(pri-unique)
。似乎没有理由不自动递增。@misterManSam如果它只是来自其他表的外键呢?不管怎样,id和这个关于名称字段的问题有什么关系?这只是一个建议,如果它的外键,它不应该被命名为id
,我在回答的最后说,这只是一个建议,我相信OP会在需要时澄清。令人惊讶的是,还有一些人仍在学习,可以通过额外的建议来提高;)