Sol*_*son 2 php mysql wordpress quickbooks
我在 MySQL IN() 列表中有大约 273 个项目,我相信这会导致获取这些项目所需的所有信息时出现问题,并且不确定如何将此查询更改为仅 1 个或至少少于 273 个查询。基本上我有串的名单,我需要查询反对,并得到了Name
和ListID
,Name是273计数阵列内:
$result = $wpdb->get_results('
SELECT Name, ListID
FROM ' . $wpdb->prefix . 'quickbook_items
WHERE Name IN ("' . implode('", "', array_map('addslashes', $part_names)) . '")
ORDER BY NULL', ARRAY_A);
Run Code Online (Sandbox Code Playgroud)
我觉得我在某处读到IN
过,如果列表太大,在 Wordpress中使用查询可能会出现问题,因为 Wordpress 不会获取所有数据。但我不记得这是 Wordpress$wpdb
限制还是 MySQL 限制。在任何情况下,我都没有返回所有 273 行,所以我真的不确定如何执行这个查询,同时保持 db 命中低于 273 次(如果我把查询放在一个循环中,就会发生这种情况,循环通过$part_names
。
任何人都对如何从上quickbook_items
表中查询 Name 和 ListID 提出建议?真的可以在这里使用一些帮助,或者是否有办法在查询集上没有字符限制来实现这一点?
IN
条款和 max_allowed_packet
内的项目数量没有明确的限制IN (...)
。
但是,SQL 字符串本身的长度(以字节为单位)受max_allowed_packet
系统变量值的限制。
这是MySQL 文档的摘录:
IN 列表中值的数量仅受 max_allowed_packet 值的限制。
max_allowed_packet的默认值为4 MB,因此除非您更改了该值,否则这极不可能是问题所在。此外,达到此限制会导致错误而不是错误结果。
addslashes
addslashes
用于构建 MySQL 字符串文字确实不是一个好主意。考虑为此目的使用mysqli_real_escape_string。
能否请您执行以下操作来分析问题。在 上构建一个循环$part_names
,并执行完全相同的语句(包括implode
)——但在每次迭代中只执行一个名称。然后检查每次迭代是否返回非空结果。
通过这种方式,您将获得未返回的名称,并且可以为您提供一些线索。
另一个可能的结果是返回所有名称- 在这种情况下,问题确实可能与IN
子句中的项目数有关。