Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >cockroachDB postgreSQL的array_position没找到的话返回NULL

cockroachDB postgreSQL的array_position没找到的话返回NULL

作者头像
xiny120
发布于 2020-04-01 13:20:15
发布于 2020-04-01 13:20:15
1.8K00
代码可运行
举报
文章被收录于专栏:毛毛v5毛毛v5
运行总次数:0
代码可运行

在array_position和array_positions中, 每个数组元素与使用IS NOT DISTINCT FROM语法的搜索值进行比较。

在array_position中,如果没有找到该值,则返回NULL。

在array_positions中,如果数组是NULL,则返回NULL; 如果数组中没有找到该值,相反返回空数组。

在string_to_array中,如果定界符参数为 NULL,输入字符串中的每一个字符将变成结果数组中的一个独立元素。如果定界符是一个空串,则整个输入字符串被作为一个单一元素的数组返回。否则输入字符串会被在每一个出现定界符字符串的位置分裂。

在string_to_array中,如果空值串参数被忽略或者为 NULL,输入中的子串不会被替换成 NULL。在array_to_string中,如果空值串参数被忽略或者为 NULL,该数组中的任何空值元素会被简单地跳过并且不会在输出串中被表示。

没有找到这样表示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array_position(days,:day) is null

完整的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function signinAppend($param,&$arr,$token,$ui){
    $dbh = new PDO(CRDB, CRDB_U, CRDB_P, array(
        PDO::ATTR_ERRMODE          => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => true,
        PDO::ATTR_PERSISTENT => true
    ));
    try{
        $keys = ["year","month","day"];
        if(checkParam($keys,$param)){
            $year = $param["year"];
            $month = $param["month"];
            $day = (int)$param["day"];
        }else{
            $year = Date("Y");
            $month =  Date("m");
            $day =  (int)Date("d");
        }

        try {
            $dbh->beginTransaction();
            $dbh->exec("SAVEPOINT cockroach_restart_signin");// This savepoint allows us to retry our transaction.
        } catch (Exception $e) {
            $arr["msg"] = "signinAppend transation开始失败";
            return;
        }
        $n = 0;
        $maxretry = 3;
        while (true) {
            try {
                if($n++ > $maxretry){
                    throw new Exception("transation重试次数超标");
                }
                $stmt = $dbh->prepare('select id from signin WHERE userid=:userid and year=:year and month=:month');
                $stmt->bindValue(':userid', $ui["id"], PDO::PARAM_INT);
                $stmt->bindValue(':year', $year, PDO::PARAM_INT);
                $stmt->bindValue(':month', $month, PDO::PARAM_INT);
                $stmt->execute();
                if ($stmt->rowCount() <= 0) {//没有该月份数据,插入。
                    $arr["msg"] = "签到成功";
                    $stmt = $dbh->prepare(
                        'insert into signin(userid,year,month,days) values(:userid,:year,:month,:day)'
                    );
                    $stmt->bindValue(':userid', $ui["id"], PDO::PARAM_INT);
                    $stmt->bindValue(':year', $year, PDO::PARAM_INT);
                    $stmt->bindValue(':month', $month, PDO::PARAM_INT);
                    $stmt->bindValue(':day', '{'.$day.'}', PDO::PARAM_STR);
                    $stmt->execute();
                    if($stmt->rowCount() <=0){
                        throw new Exception("测试异常2");
                    }
                }else{
                    $arr["msg"] = "签到成功";
                    $stmt = $dbh->prepare(
                        'update signin set days=array_append(days,:day) where userid=:userid and year=:year and month=:month and array_position(days,:day) is null'
                    );
                    $stmt->bindValue(':day', $day, PDO::PARAM_STR);   
                    $stmt->bindValue(':userid', $ui["id"], PDO::PARAM_INT);
                    $stmt->bindValue(':year', $year, PDO::PARAM_INT);
                    $stmt->bindValue(':month', $month, PDO::PARAM_INT);
                    $stmt->execute();
                    if ($stmt->rowCount() <= 0) {//没有该月份数据,插入。
                        $arr["msg"] = "重复签到";    
                    }
                }
                $dbh->exec('RELEASE SAVEPOINT cockroach_restart_signin');// Attempt to release the savepoint (which is really the commit).
                $dbh->commit();
                $arr["status"] = 1;
                break;
            }catch(Exception $e0){
                $dbh->rollBack();
                $arr["msg"] = $e0->getMessage();
                return;  
            }catch (PDOException $e) {
                if ($e->getCode() != '40001') {// Non-recoverable error. Rollback and bubble error up the chain.
                    $dbh->rollBack();
                    $arr["msg"] = "userRegister error 2";
                    return;   
                } else {// Cockroach transaction retry code. Rollback to the savepoint and restart.
                    $dbh->exec('ROLLBACK TO SAVEPOINT cockroach_restart_signin');
                }
            }
 
        }
    }catch(Exception $e){
        $arr["msg"] = $e->getMessage();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
php mysql PDO 查询操作的实例详解
php mysql PDO 查询操作的实例详解 <?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', '
用户2323866
2021/07/08
2.4K0
PDO 用法学习「建议收藏」
基于驱动: 1、安装扩展 php_pdo.dll 2、安装驱动 php_pdo_mysql.dll
全栈程序员站长
2022/09/20
3.8K0
PHP 应用PDO技术操作数据库
创建测试数据: 首先我们需要创建一些测试记录,然后先来演示一下数据库的基本的链接命令的使用.
王瑞MVP
2022/12/28
3.4K0
PHP中用PDO查询Mysql来避免SQL注入风险的方法
当我们使用传统的 mysql_connect 、mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制。虽然可以用mysql_real_escape_string()函数过滤用户提交的值,但是也有缺陷。而使用PHP的PDO扩展的 prepare 方法,就可以避免sql injection 风险。 PDO(PHP Data Object) 是PHP5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,如
企鹅号小编
2018/01/25
2.4K0
通过 PDO 扩展与 MySQL 数据库交互(下)
关于预处理语句我们在上篇教程中已经简单介绍过,我们可以将其与视图模板类比,所谓预处理语句就是预定义的 SQL 语句模板,其中的具体参数值通过占位符替代:
学院君
2020/08/04
1.6K0
SOA 面向服务框架设计与实现
文章节选自 《Netkiller Architect 手札》 由于Java 语言的编译与重启不可抗拒缺陷,所选择使用PHP弥补这个缺陷。 在合适的场景中使用PHP 为 Java 提供 SOA 服务有很
netkiller old
2018/03/05
1.5K0
SOA 面向服务框架设计与实现
cockroachDB
[root@izuf693wyms6h7ot360phcz cert]# cockroach cert create-ca --certs-dir=certs --ca-key=my-safe-directory/ca.key [root@izuf693wyms6h7ot360phcz cert]# cockroach cert create-node crdb.jiushu8.com crdb.jiushu8.com --certs-dir=certs --ca-key=my-safe-directory
xiny120
2020/03/20
6710
PHP中的PDO操作学习(三)预处理类及绑定数据
要说 PDO 中最强大的功能,除了为不同的数据库提供了统一的接口之外,更重要的就是它的预处理能力,也就是 PDOStatement 所提供的功能。因为它的存在,才让我们可以安心地去使用而不用操心 SQL 语句的拼接不好所带来的安全风险问题。当然,预处理也为我们提升了语句的执行效率,可以说是 PDO 的另一大杀器。
硬核项目经理
2020/12/30
1.5K0
php 设计模式-数据映射模式(应用程序与数据库交互模式)
一般,client是业务逻辑层,UserMapper是数据访问层。UserTable底层数据结构。 我们尽量做到如果表User修改了: 1)工具重新自动生成UserTable类 2)只修改client代码和少量的UserMapper代码,一般修改UserMapper的常量const的内容就可以了。
黄规速
2022/04/14
5300
PHP 开发基础知识笔记
设置Cookie登录: 基于Cookie设置实现的用户登录模块,清空与设置Cookie选项.
王瑞MVP
2022/12/28
1.9K0
PHP连接MySQL的几种方式及推荐
https://www.runoob.com/php/php-mysql-intro.html
码客说
2023/07/11
7650
PHP连接MySQL的几种方式及推荐
使用PHP解析行政区划代码
话说这个PHP脚本我已经写过好多次了,不过由于国家统计局提供的数据格式有些许的变化,所以我又重写了一遍,问题既涉及到PHP,同时也涉及到MySQL,感觉很适合做面试题,这类问题往往最能反映出求职者的基本素质。
LA0WAN9
2021/12/14
5650
使用PHP解析行政区划代码
PHP-PDO介绍
方法一:mysql扩展【这种方式php7已经淘汰】 方法二:mysqli扩展 方法三:PDO扩展
cwl_java
2020/03/26
2.5K0
掌握PHP PDO:数据库世界的魔法师
PDO(PHP数据对象)是PHP的一个轻量级数据库访问抽象层,允许开发者以一种统一的方式访问多种不同类型的数据库,如MySQL、PostgreSQL、SQLite等。它提供了一组类和方法,使得在PHP应用程序中执行数据库查询和操作变得更加简单和安全。PDO通过使用面向对象的方式来处理数据库操作,提供了更加灵活和可维护的代码结构。
繁依Fanyi
2024/05/01
2680
用 PHP 实现一个简单的留言板功能
留言板是一个非常经典的小项目,适合刚接触 PHP 的朋友动手实践。通过这个项目,你可以学习如何用 PHP 和 MySQL 交互,如何处理用户输入,以及如何搭建一个完整的小应用。这篇文章会从需求分析开始,一步步带你完成留言板的开发。放心,文章不会用太多专业术语,咱们讲人话!
繁依Fanyi
2025/01/28
2170
MySQL运维实战 之 PHP访问MySQL你使用对了吗
大家都知道,slow query系统做的好不好,直接决定了解决slow query的效率问题
猿哥
2019/03/13
9680
【译】现代化的PHP开发--PDO
源/https://www.startutorial.com/articles/view/modern-php-developer-pdo
Lemon黄
2019/10/10
2K0
swoole+PHP自动取消订单he还原库存
一、业务场景:当客户下单在指定的时间内如果没有付款,那我们需要将这笔订单取消掉,比如好的处理方法是运用延时取消,这里我们用到了swoole,运用swoole的异步毫秒定时器不会影响到当前程序的运行,具体参考:https://wiki.swoole.com/wiki/page/319.html
php007
2019/08/05
1K0
swoole+PHP自动取消订单he还原库存
php pthreads多线程的安装与使用
安装Pthreads 基本上需要重新编译PHP,加上 –enable-maintainer-zts 参数,但是用这个文档很少;bug会很多很有很多意想不到的问题,生成环境上只能呵呵了,所以这个东西玩玩就算了,真正多线程还是用Python、C等等
超级小可爱
2023/02/23
8400
PDO 与 MySQLi 的区别与最佳实践
在 PHP 中,MySQL 是最常用的关系型数据库管理系统,而与 MySQL 交互的方式有两种主要的扩展:MySQLi 和 PDO。这两种扩展都允许 PHP 与 MySQL 数据库进行交互,但它们在设计理念、功能特性以及使用方式上有所不同。理解它们的区别以及各自的最佳实践,对于开发者选择合适的数据库操作方式至关重要。
繁依Fanyi
2025/01/24
1630
相关推荐
php mysql PDO 查询操作的实例详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验