gpt4 book ai didi

php - 在 JSON-String 上与 PDO 一起使用

转载 作者:行者123 更新时间:2023-11-28 23:29:09 24 4
gpt4 key购买 nike

实际上我知道如何使用 LIKE 语句和 PDO

现在我有一个名为 e.g. 的数据库表。 foobar

foobar 包含一个 JSON 字符串,例如:

{"firstname":"foo","email":"aaa@aaa.aa","lastname":"bar"}

现在,在我对表调用 INSERT 之前,我想检查电子邮件是否已在使用中。

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

如您所见,我将电子邮件传递到 pdo 查询中。 注意 ->query 是我处理一些东西的自定义函数。在这种情况下,知道会发生什么并不重要。

我遇到的问题是:

如果上面的条目存在,那么就不可能再添加这样的电子邮件了:

aa@aaa.aa
^^....only two A's

所以我想我可以简单地改变

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

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

但这行不通。有没有办法检查整个字符串部分?

{"firstname":"foo","email":"aaa@aaa.aa","lastname":"bar"

最佳答案

如果您不能将 JSON 字段分解为它们自己的列,那么我建议使用 JSON column type .它是 MySQL 原生的,对于这种大小的 JSON 来说 super 快,而且使用起来并不比命令行上的 jq 更难。

如果那不是一个选项,我会使用 REGEXP :

mysql> select * from foobar;
+-----------------------------------------------------------+
| json |
+-----------------------------------------------------------+
| {"firstname":"foo","email":"aaa@aaa.aa","lastname":"bar"} |
| {"firstname":"FOO","email":"aa@aaa.aa","lastname":"BAR"} |
+-----------------------------------------------------------+

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

这是有用的,但很难防弹,并且借用一个绝妙的措辞,除了琐碎的行集之外,会扼杀任何东西的性能。

关于php - 在 JSON-String 上与 PDO 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37973568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com