2016-06-22 58 views
1

Actualy我知道如何使用LIKE語句PDO使用像PDO的JSON字符串

現在我有一個DB-表例如被稱爲foobar的

foobar的包含一個JSON字符串,如:現在擺在我打電話給我的INSERT上我要檢查郵件是否已在使用該表

{"firstname":"foo","email":"[email protected]","lastname":"bar"} 

$pdo->query("SELECT * FROM myTable WHERE foobar LIKE ?", array('%' . $email . '%')); 

如您所見,我將電子郵件傳遞到pdo查詢中。 注意->query是我處理一些東西的自定義函數。在這種情況下,知道會發生什麼並不重要。

我的問題是:

如果像上面的條目存在,那麼它不再能夠添加電子郵件這就是這樣的:

[email protected] 
^^....only two A's 

所以我想我可以簡單地改變

array('%' . $email . '%') 

array('%"' . $email . '"%') 

但這並不奏效。有沒有辦法檢查整個琴絃部分?

{ 「名字」: 「富」, 「電子郵件」:[email protected], 「姓氏」: 「酒吧」}

+0

我會使用['REGEXP'](http://dev.mysql.com/doc/refman/5.7/en/regexp.html)或[JSON列類型](https://dev.mysql .COM/DOC/refman/5.7/EN/json.html)。 – bishop

+0

@bishop我認爲正則表達式會帶來同樣的問題。查看JSON列類型看起來很複雜:) – Dwza

+0

重新考慮這個太遲了嗎? –

回答

1

如果不能打破JSON領域到他們自己的專欄,那麼我會建議JSON column type。它本來就是MySQL,對於這個尺寸的JSON來說超級快,而且在命令行上不會比使用jq更困難。

如果這不是一種選擇,我會用一個REGEXP

mysql> select * from foobar; 
+-----------------------------------------------------------+ 
| json              | 
+-----------------------------------------------------------+ 
| {"firstname":"foo","email":"[email protected]","lastname":"bar"} | 
| {"firstname":"FOO","email":"[email protected]","lastname":"BAR"} | 
+-----------------------------------------------------------+ 

mysql> select * from foobar where json regexp '"email":"[email protected]"'; 
+----------------------------------------------------------+ 
| json              | 
+----------------------------------------------------------+ 
| {"firstname":"FOO","email":"[email protected]","lastname":"BAR"} | 
+----------------------------------------------------------+ 
1 row in set (0.00 sec) 

這是維修,但幾乎沒有防彈,並借用短語的優秀又將謀殺任何東西,但瑣碎的行業績集。

+0

「不防彈」在這裏是一種輕描淡寫。這將以不平凡的行數謀殺你的數據庫。 – tadman

+0

@tadman你說的。相應更新。 – bishop

+0

即使我改變了我的數據庫設計,這是對我的問題的正確回答,所以對於所有尋求類似的人來說,請仔細閱讀我的問題中的評論! :) – Dwza