php使用mysql的NULLIF函数存入null值

在开发的过程中发现一个问题,表中有2个字段name(类型varchar)和 age(类型tinyint), 想要name字段写入null值,可以直接使用下面的sql语句: 

insert into test(name,age) values ('lily',6);
insert into test(name,age) values ('null','null');
insert into test(name,age) values  (null,null)

  

那如果要批量存入数据呢?

复制代码
<?php
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8";
$user = "root";
$password = "";
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$values = [
    ['name' => 'null', 'age' => 5],
    ['name' => 'null', 'age' => 'null'],
];
$sql = "insert into test(name,age) values ";

foreach ($values as $index => $value) {
    $name = $value['name'];
    $age = $value['age'];
    if ($index > 0) $sql .= ",";
    $sql .= "('$name',$age)";
}
$rows = $pdo->exec($sql);
var_dump($rows);
var_dump($pdo->lastInsertId());
复制代码

  

可以看出:数值类型age存入mysql的null,而字符串类型的name存入字符串'null',因为字符串格式的字段一定要用引号括起来

要解决这个问题,就要使用mysql 的NULLIF函数

NULLIF(expression1, expression2)

如果传递的两个表达式相等,则MySQL NULLIF()函数返回NULL,否则,如果两个表达式都不相等,则返回第一个表达式。

 

修改如下

复制代码
<?php
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8";
$user = "root";
$password = "";
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$values = [
    ['name' => 'daisy', 'age' => 7],
    ['name' => 'null', 'age' => 'null'],
];
$sql = "insert into test(name,age) values ";

foreach ($values as $index => $value) {
    $name = $value['name'] == 'null' || $value['name'] == '' ? '' : $value['name'];
    $age = $value['age'];
    if ($index > 0) $sql .= ",";
    $sql .= "(NULLIF('$name',''),$age)";
}
$rows = $pdo->exec($sql);
var_dump($rows);
var_dump($pdo->lastInsertId());
复制代码

 

 

顺便记录下和null相关的mysql函数

IFNULL(expression1, expression2)  :   expression1为null则返回expression2,否则返回expression1

ISNULL(expression) :  expression为null则返回1,否则返回 0

 

顺便记录下mysql的自增id主键和联合主键

开发中发现自增id主键在需要需要某些字段唯一的情况下容易造成记录多的情况,可以使用联合主键来避免。例如需要字段1和字段2在表中有唯一记录,这时可创建字段1和字段2的联合主键或者唯一索引配合replace 语句,避免使用自增主键id新增记录带来的多个客户端同时操作页面造成的字段1和字段2不唯一的情况。

自增id主键在批量删除中还是非常好用的

posted @   carol2014  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示