Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在()列表中对MySQL有限制吗_Php_Mysql_Wordpress_Quickbooks - Fatal编程技术网

Php 在()列表中对MySQL有限制吗

Php 在()列表中对MySQL有限制吗,php,mysql,wordpress,quickbooks,Php,Mysql,Wordpress,Quickbooks,我在MySQL in()列表中有大约273个项目,我认为这会导致获取这些项目所需的所有信息时出现问题,并且不确定如何将此查询更改为仅1个或至少少于273个单独的查询。基本上,我有一个字符串名称列表,需要查询并获取名称和列表ID,其中名称位于273计数数组中: $result = $wpdb->get_results(' SELECT Name, ListID FROM ' . $wpdb->prefix . 'quickbook_items WHERE Nam

我在MySQL in()列表中有大约273个项目,我认为这会导致获取这些项目所需的所有信息时出现问题,并且不确定如何将此查询更改为仅1个或至少少于273个单独的查询。基本上,我有一个字符串名称列表,需要查询并获取
名称
列表ID
,其中名称位于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);
我觉得我在某个地方读到过,如果列表太大,在Wordpress中使用
中的
查询可能会有问题,因为Wordpress无法获取所有数据。但我不记得这是Wordpress
$wpdb
限制还是MySQL限制。在任何情况下,我都不会返回所有273行,因此我真的不确定如何执行此查询,同时保持db命中率低于273次(如果我将查询放在循环中,循环通过
$part\u names
,就会发生这种情况)

任何人对如何从如上所示的
quickbook\u items
表中查询Name和ListID有什么建议吗?这里真的需要一些帮助,或者如果有一种方法可以不限制查询集中的字符数,来实现这一点?

IN
子句和
max\u allowed\u packet
在(…)
中,
中的项目数量没有定义限制

但是,SQL字符串本身的长度(以字节为单位)受
max_allowed_packet
系统变量的值限制

以下是一段摘录自:

in列表中的值数量仅受max_allowed_数据包值的限制

默认值为4MB,因此,除非您更改了此值,否则问题不大可能出现。 此外,达到这个极限会导致错误,而不是错误的结果


addslashes
使用
addslashes
来构建MySQL字符串文本确实不是一个好主意。 考虑使用这个目的。


建议 你能做以下的事情来分析这个问题吗。 在
$part_names
上构建一个循环,并执行完全相同的语句(包括
内爆
)-但每次迭代只针对一个名称。然后检查每次迭代是否返回非空结果

通过这种方式,您将获得未返回的名称,它可以为您提供一些线索


另一种可能的结果是返回所有名称-在这种情况下,问题可能确实在于
in
子句中
的项数。

stackoverflow在MySQL中表示可能重复使用LOWER()或UPPER()函数与名称匹配。可能是大小写问题。或者像maxlee=maxlee'sOfftopic这样的问题:您可能不想使用addslashes,但mysqli_real_escape_string或Pdo::quote。请参阅addslashes()不适用于MySQL的真正转义(例如,可能使用十六进制表示)也许我误解了,但这似乎不同于WordPress自己推荐的sql注入预防。WordPress添加了神奇的引号,即使您在php中关闭了它。
addslashes
对于此功能很重要,该功能只对WordPress管理员可用,总共需要2人。我我记得我读到Wordpress类
$wpdb
函数对这些函数中允许的字符总数进行了限制。我的一位同事以前甚至为我确认过这一点。好了,伙计们,似乎wpengine正在终止查询,因为它的字符太长(这太荒谬了):