V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iugo
V2EX  ›  PHP

Laravel 對 PostgreSQL 支持的問題, SQL 單雙引號使用錯誤

  •  
  •   iugo · 2015-11-21 16:40:04 +08:00 · 3689 次点击
    这是一个创建于 3322 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/laravel/framework/issues/11048

    P.S. Laravel 的社區怎麽沒什麼人,好冷清。
    7 条回复    2015-11-22 22:33:34 +08:00
    XianZaiZhuCe
        1
    XianZaiZhuCe  
       2015-11-21 17:27:27 +08:00 via Android
    抱歉不能帮助。
    重点是,社区还是去国外吧
    jhdxr
        2
    jhdxr  
       2015-11-21 19:56:08 +08:00
    我觉得别人的回复已经够清楚了。。。
    PDO 的 binding 只能针对值,并不支持库名、表名和列名
    cevincheung
        3
    cevincheung  
       2015-11-21 20:53:50 +08:00
    只是因为看到 PostgreSQL 而进
    iugo
        4
    iugo  
    OP
       2015-11-22 10:08:51 +08:00
    @jhdxr 抱歉,我發這個帖的時候還沒有看到那邊有回復。
    iugo
        5
    iugo  
    OP
       2015-11-22 10:19:42 +08:00
    對 MySQL 是沒有問題的,所以開始的時候我覺得這是一個可修正的問題。解決方法如正則 SQL 語句判斷哪個參數是表名、列名,然後按照 SQL 標準爲表名、列名添加雙引號。

    如果這是 PHP PDO 的做法,而不是 Laravel 的,那我是發錯了地方。

    我覺得爲列名綁定參數,這也是一種可以理解的用法。細想之下,覺得將列名和值放在一起是有些怪,而且一般情況下使用列名是已經約定好的,而不是傳來的值。我應該先把 SQL 寫好了再給 PDO 更合理一些。
    jhdxr
        6
    jhdxr  
       2015-11-22 21:29:47 +08:00
    @iugo 抱歉,但其实在别的语言,例如 java 的 prepared statement 据我所知也是只支持针对 column value 去进行 binding 。并且,我认为这实在是一种并不好的习惯,将数据库细节直接暴露给客户端。
    btw ,关于正则那个方案,我相信你应该没有写过带有各种 union 、子查询等等的查询。。。用正则解析它会疯的_(:з」∠)_
    如果你真的需要这么做,我推荐 sprintf_(:з」∠)_
    neoblackcap
        7
    neoblackcap  
       2015-11-22 22:33:34 +08:00
    这个问题我之前也看到,主要是 PDO 的问题。 MySQL 自己的特性战胜了标准
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:19 · PVG 22:19 · LAX 06:19 · JFK 09:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.