php - SQLSTATE[HY000] : General error: 2006 MySQL server has gone away creating temporary table

标签 php mysql pdo

我所看到的一切都是由于插件或“奇怪”的配置或数据集造成的。

我正在尝试使用 PHP、MySQL 和 PDO 做一些非常简单的事情。

    $table_name = 'TEMP_' . time();
    $sql_commands = "CREATE TEMPORARY TABLE {$table_name} (X CHAR(1));";
    $conn = Database::factory();
    $stmt = $conn->prepare($sql_commands);
    $stmt->execute();

Database::factory() 必须返回从以下位置创建的 PDO 对象:

$opt = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET time_zone = '" . TIME_ZONE . "';",
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET SESSION group_concat_max_len = 10485760;",
];

$dsn = "mysql:dbname=$database;host=$hostname;port=$port;charset=utf8";

每次我尝试创建临时表时都会收到此错误:

SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

但是该表确实被创建了(至少,如果我重新运行得太快,我会收到另一个错误,说明该表已经存在。)

/etc/my.cnf 的内容

max_allowed_packet=128MB  # tried various values from 8MB up to 4GB
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure_file_priv=""
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

为简洁起见,SHOW VARIABLES DUMP已粘贴。

最佳答案

您的 PREPARE 和 EXECUTE 后面是否应该紧跟着 CLOSE 以完成典型的循环?

max_allowed_pa​​cket=128MB 应该是 max_allowed_pa​​cket=您的 cnf 中的 128M

请将您的错误日志发布到问题中。

关于php - SQLSTATE[HY000] : General error: 2006 MySQL server has gone away creating temporary table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46862340/

相关文章:

php - 将 sql 查询转换为 php codeigniter

php - Yii2:ActiveQuery 可以返回以 SQL 查询的第一列为键的数组吗?

javascript - JQuery - 将逗号添加到数字输入但不提交

php - 无需下载整个文件即可读取 ID3 标签

php - 如何在 Laravel 5.2 中设置印度时间?

php - 如何列出按常用标签数量排序的相关博客文章?

php - MYSQL JOIN 多个表不返回结果

php - 如何在单独的表中分离 PDO 查询结果和回显

php - pdo fetchAll 函数返回一个空数组

php - 使用 Laravel Artisan 迁移多个数据库