1
XianZaiZhuCe 2015-11-21 17:27:27 +08:00 via Android
抱歉不能帮助。
重点是,社区还是去国外吧 |
2
jhdxr 2015-11-21 19:56:08 +08:00
我觉得别人的回复已经够清楚了。。。
PDO 的 binding 只能针对值,并不支持库名、表名和列名 |
3
cevincheung 2015-11-21 20:53:50 +08:00
只是因为看到 PostgreSQL 而进
|
5
iugo OP 對 MySQL 是沒有問題的,所以開始的時候我覺得這是一個可修正的問題。解決方法如正則 SQL 語句判斷哪個參數是表名、列名,然後按照 SQL 標準爲表名、列名添加雙引號。
如果這是 PHP PDO 的做法,而不是 Laravel 的,那我是發錯了地方。 我覺得爲列名綁定參數,這也是一種可以理解的用法。細想之下,覺得將列名和值放在一起是有些怪,而且一般情況下使用列名是已經約定好的,而不是傳來的值。我應該先把 SQL 寫好了再給 PDO 更合理一些。 |
6
jhdxr 2015-11-22 21:29:47 +08:00
@iugo 抱歉,但其实在别的语言,例如 java 的 prepared statement 据我所知也是只支持针对 column value 去进行 binding 。并且,我认为这实在是一种并不好的习惯,将数据库细节直接暴露给客户端。
btw ,关于正则那个方案,我相信你应该没有写过带有各种 union 、子查询等等的查询。。。用正则解析它会疯的_(:з」∠)_ 如果你真的需要这么做,我推荐 sprintf_(:з」∠)_ |
7
neoblackcap 2015-11-22 22:33:34 +08:00
这个问题我之前也看到,主要是 PDO 的问题。 MySQL 自己的特性战胜了标准
|