在Mysql Prepared语句中增加设置变量长度

Posted

技术标签:

【中文标题】在Mysql Prepared语句中增加设置变量长度【英文标题】:In Mysql Perpared statement increase the set variable length 【发布时间】:2013-05-30 20:00:00 【问题描述】: 设置@sql1 = ''; 选择 GROUP_CONCAT(DISTINCT 连接( 'MAX(IF(field_id = ''', 字段 ID, ''', 值, NULL)) AS `', 字段ID,'`' ) ) 进入@sql1 来自内容详细信息; SET @sql1 = CONCAT('SELECT', @sql1, ' FROM content_details GROUP BY content_id'); 选择@sql1; 从@sql1准备stmt; 执行语句; DEALLOCATE PREPARE stmt;

在上面的代码中,@sql1 变量只存储了一些有限的字符。 在这里,我正在动态连接字符串。 我不知道将来会发生什么字符串的确切总长度。我的问题是我们如何将无限的字符长度设置为 $sql1 变量。请指教。

【问题讨论】:

你有什么问题? 因为我需要具有无限字符长度的 $sql1 变量。 请将此添加到您的问题正文中,这样我们就无需通过 cmets 了解实际问题是什么。到目前为止,您遇到过什么问题吗?变量的最大大小是如此之大,以至于我都懒得去想它。 是的。我对字符串的长度有疑问。它没有存储所有字符。仅存储一些有限的(255 个左右)字符。 限制,如果存在这样的限制,则远高于此(请参阅普通的SET @a = 'blahblah....')。 【参考方案1】:

听起来您在使用 GROUP_CONCAT_MAX_LEN 时遇到了问题。您可以在会话期间调整此变量的长度。

这个变量的默认长度是1024。你应该可以使用:

set session group_concat_max_len = yourNewValue;

如果您要全局设置它会影响所有其他连接,这就是为什么您可能只想为您的会话设置它。

【讨论】:

以上是关于在Mysql Prepared语句中增加设置变量长度的主要内容,如果未能解决你的问题,请参考以下文章

具有多个连接的 mysqli Prepared 语句不断返回 false [关闭]

MySQL Prepared PDO 语句正在删除反斜杠

PHP PDO - 关闭语句 - 不能创建超过 max_prepared_stmt_count 语句

PDO Prepared在单个查询中插入多行

MYSQLI Prepared statement update statement with where in array

如何在SELECT FROM PDO Prepared Statement中为搜索框设置多个搜索条件?