设为首页 收藏本站
查看: 878|回复: 0

[经验分享] PostgreSQL tips

[复制链接]

尚未签到

发表于 2016-11-19 06:51:18 | 显示全部楼层 |阅读模式


  • PHP PDO获取lastInsertId


    PHP手册对于PDO::lastInsertId 函数的注解是


    string PDO::lastInsertId ([ string $name = NULL ] )


    Returns the ID of the last inserted row, or the last value from a sequence object, depending on the underlying driver. For example, PDO_PGSQL() requires you to specify the name of a sequence object for the name parameter

     

    就是说对于pgsql必须指定sequence值,比如

    $val = $dbh->lastInserId('table_id_seq');
     


    如果不指定seq值则得不到正确值。解决办法是使用pgsql对'insert'扩展的语法

    $sql= "insert into test1 (id, s) values (default, 'a') RETURNING  *";
    $sql2 = "insert into test1 (id, s) values (default, 'a'),  (default, 'b') RETURNING  * ";
    $sql3 = "insert into test1 (s) values ('a'), ('b') RETURNING  id ";
    $stmt= $dbh->query($sql);  // 注意是query而不是exec
    // do错误检查
    var_export($stmt->fetch(PDO::FETCH_ASSOC));

     第一条sql返回的是整个插入行,第二条返回是最后插入的整行,第三条返回指定的字段

  • 直接对PDOStatement结果进行迭代



    一般情况我们对query出来的结果需要先fetchAll然后再迭代,比如
    $sql  = 'SELECT * FROM users';
    $stmt = $dbh->query($sql, PDO::FETCH_ASSOC);
    // .. do err check
    $res = $stmt->fetchAll();
    if ($res) {
    foreach ($res as $row ) {
    // .. do something
    $uid = $row['userid'];
    }
    }
     

    PHP5的foreach可以对Object进行迭代处理,于是可以这样:
    $sql  = 'SELECT * FROM users';
    $stmt = $dbh->query($sql, PDO::FETCH_ASSOC);
    // .. do err check
    foreach ($stmt as $row ) {  // 注意是$stmt 而不是 $stmt->fetchAll()
    // .. do something
    $uid = $row['userid'];
    }

     
    并且不用额外判断$stmt的值真,多么的方便 DSC0000.gif

  • PEAR::MDB2 对 PGSQL BOOL字段兼容性



    mdb2 v1.x版本对于pgsql bool类型字段有兼容问题,获取的值居然是字符串'f'/'t'而不是期望的bool值或者数值0/1。 并且PHP自带的pgsql函数(pg_query())也有同样的问题。

    解决办法就是使用PHP的PDO驱动。PDO_PGSQL可以正确处理bool字段值。





  • 多列主键索引
     

    多列主键顺序与创建 Primary key (col1, col2) 时顺序有关。对col2单独搜索时“=”将会使用主键索引,其他比较操作符将无法使用主键索引;如果同时也对col1进行条件搜索,则对col2使用同样策略无论col1的比较符是什么。所以建表使用多列主键时需要考虑搜索环境来设定主键顺序,以及根据搜索col2的频率考虑是否在col2上建立单独索引。

  .

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302274-1-1.html 上篇帖子: JDBC连接PostgreSQL 下篇帖子: postgresql ANALYZE
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表