【问题标题】:Having trouble running cakephp app on remote server在远程服务器上运行 cakephp 应用程序时遇到问题
【发布时间】:2012-12-11 23:56:27
【问题描述】:

如果你得到:

Error: SQLSTATE[42000]: Syntax error or access violation: 1104 The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay

在将 cake php 应用程序和数据库从 xampp localhost 上传到远程服务器之后。

已尝试将蛋糕数据库导入本地计算机上的新数据库并且工作正常。所以我看不到它是导入的信息。

不知道如何解决这个问题。这是一个简单而常见的问题,可以通过以下简单方法解决。

【问题讨论】:

标签: mysql cakephp-2.0


【解决方案1】:

在我的好朋友 ten1 在 cakephp IRC 聊天的帮助下,我设法找到了问题/解决了很多问题。

当这是一个 cakephp 特定问题时,在我的情况下,您需要做一些不可想象的事情并编辑核心。

需要编辑的文件是AclNode.php 位于:/lib/Cake/Model/AclNode.php

你需要在第 113 行之前添加一行

112    }
                $db->query('SET SQL_BIG_SELECTS=1'); //Add this line
113             $result = $db->read($this, $queryData, -1);
114             $path = array_values($path);

这通常只是共享主机服务器上的问题。

【讨论】:

  • 我怀疑你需要破解核心,因为已经有无数人在共享主机上使用蛋糕。如果需要,您可以轻松地将$db->query('SET SQL_BIG_SELECTS=1'); 添加到甚至重载 DBO 的 beforeFind 回调中。不得不修改核心只是因为您没有花时间了解您正在使用的工具。修复查询将是明显的赢家。
【解决方案2】:

您可以在 app/models/app_model.php 文件中添加 beforeFind 方法,而不是编辑核心文件,如果希望它影响整个模型文件或特定模型文件,如下所示:

function beforeFind()   {
    $this->query('SET SQL_BIG_SELECTS=1');
}

【讨论】:

    【解决方案3】:

    对于 Cakephp 3 以下作品:

        'Datasources' => [
            'default' => [
                'init'   => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET SESSION SQL_BIG_SELECTS=1',
                    ), // Add this to the existing array
    

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 2018-04-16
      相关资源
      最近更新 更多