Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 - Fatal编程技术网

Php mysql中的查询长度有限制吗?

Php mysql中的查询长度有限制吗?,php,mysql,Php,Mysql,我问这个问题是因为我需要知道这个限制,因为我在PHP脚本中生成SELECT查询,并且在循环中生成查询的位置部分 $query="SELECT field_names FROM table_name WHERE "; $condition="metadata like \"%$uol_metadata_arr[0]%\" "; for($i=1; $i<count($uol_metadata_arr); $i++){ $condition.=" OR metadata like

我问这个问题是因为我需要知道这个限制,因为我在PHP脚本中生成SELECT查询,并且在循环中生成查询的位置部分

 $query="SELECT field_names FROM table_name WHERE ";
 $condition="metadata like \"%$uol_metadata_arr[0]%\" ";
 for($i=1; $i<count($uol_metadata_arr); $i++){
    $condition.=" OR metadata like \"%$uol_metadata_arr[$i]%\" ";
 }
 $query.=$condition;
 $result=mysql_query($query);
$query=“从表\u name WHERE中选择字段\u name”;
$condition=“metadata like\”%$uol\U metadata\U arr[0]\”;
对于($i=1;$i)
  • (如果可能)使用
    WHERE元数据('value1','value2')
  • 您可能需要增加。它默认为16MB(客户端,在旧版本中低至1MB服务器端),并且构建一个不受该限制的查询并不难(例如,使用巨大的
    插入
    查询从其他地方导入数据)

  • 像'%string%'
    是一个性能杀手。这样的查询不能在该列上使用索引。
    像'string%'
    另一方面,查看全局变量。

    您需要访问my.cnf文件来调整它(还需要在客户端上调整它)。典型的默认值是1mb或16mb…

    我相信您主要关心的应该是大量使用
    LIKE
    (这很昂贵),而不是查询字符串本身的长度:)有没有将LIKE替换为其他内容的建议?全文索引可能是合适的。非常感谢所有参与此问题的人。我非常感谢你的帮助。我真的很喜欢stackoverflow的潜在用户,他们随时准备帮助您。在对我的sql查询进行了所有这些批评之后,我决定更改我的DB设计,以便跳过使用LIKE语句。所以现在我不会再使用这种血腥的东西了。这个社区也提出了新的设计,你可以在这里看到-。谢谢。但('value1','value2')中的元数据可能重复,仅当元数据完全等于value1或value2时才检索。在我的例子中,我需要检索类似的元数据,即我需要考虑“SQL”和“MySQL”是相等的字符串。<代码>其中(“Value1”、“Value2”)< /C> >中的元数据将不会做与他提到的相同的事情。它不会查看“value”是否在元数据中,而是检查列表中的每个值(“value1”、“value2”),以查看是否有任何项与元数据完全匹配。但是,如果OP涉及几十个where子句,OP肯定会想查看所提到的
    max_allowed_packet
    。文档中说:“客户端和服务器都有自己的max_allowed_packet变量,因此如果要处理大数据包,必须在客户端和服务器中增加此变量。如果您使用的是mysql客户端程序,其默认的max_allowed_packet变量为16MB”,因此似乎仅mysql客户端程序的默认值为16MB。在服务器上,默认值为]|]|]。