如何在与PDO和预准备语句一起使用时确定所需的max_allowed_pa cket大小?

问题描述 投票:0回答:1

或者通过示例,max_allowed_packet需要执行以下查询?请不要只给我价值,但要解释你是如何决定的。谢谢

$stmt=$pdo->prepare('INSERT INTO t(c1,c2,c3) VALUES(?,?,?)');
$stmt->execute([9876543210,9876543210,9876543210]);

编辑。或者这个怎​​么样:

$sql='INSERT INTO t(pk,c1,c2) VALUES(?,?,?), (?,?,?), (?,?,?)
ON DUPLICATE KEY UPDATE c1=VALUES(c1),c2=VALUES(c2)';
$stmt=$pdo->prepare($sql);
$stmt->execute([1,111,111,2,222,222,3,333,333]);
mysql pdo prepared-statement
1个回答
1
投票

要计算max_allowed_packet大小,请获取最大blob列的字节长度并乘以11次。有关详细信息,请访问see this post.

在您的示例中,尽管您有一个冗长的查询而不是大量的blob数据。根据我的经验,乘以11指南仍然可行,但这不是调整价值的最佳方式。

如上所述,证据是调整此值的最佳方法。我会将max_allowed_packet设置为任意巨大的值,如1G。 (我相信MySQL支持的最大值。)然后,在正常操作中运行您的软件。如果你没有得到PACKET_TOO_LARGE错误,那么将值减半,然后再试一次。重复,直到你溢出限制然后加倍。这将代表您特定需求的合理上限,并有足够的增长空间。

© www.soinside.com 2019 - 2024. All rights reserved.