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

2015-11-21 16:40:04 +08:00
 iugo
https://github.com/laravel/framework/issues/11048

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

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

我覺得爲列名綁定參數,這也是一種可以理解的用法。細想之下,覺得將列名和值放在一起是有些怪,而且一般情況下使用列名是已經約定好的,而不是傳來的值。我應該先把 SQL 寫好了再給 PDO 更合理一些。
jhdxr
2015-11-22 21:29:47 +08:00
@iugo 抱歉,但其实在别的语言,例如 java 的 prepared statement 据我所知也是只支持针对 column value 去进行 binding 。并且,我认为这实在是一种并不好的习惯,将数据库细节直接暴露给客户端。
btw ,关于正则那个方案,我相信你应该没有写过带有各种 union 、子查询等等的查询。。。用正则解析它会疯的_(:з」∠)_
如果你真的需要这么做,我推荐 sprintf_(:з」∠)_
neoblackcap
2015-11-22 22:33:34 +08:00
这个问题我之前也看到,主要是 PDO 的问题。 MySQL 自己的特性战胜了标准

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/237882

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX