2

我正在为我的应用程序使用框架 cakePHP。我使用 xampp 在 localhost 上对其进行了编程,现在尝试将其上传到我的网站上。它在本地主机上没有任何问题。现在只有这一页,在新服务器上不起作用。其他站点(也使用数据库连接)工作正常。

对于这一站点,将显示以下消息:

错误:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“添加”附近使用正确的语法

SQL 查询:添加

函数 add() 看起来像这样。

public function add() { 
      //$this->create();
      $word_id = $this->Word->getWord_id();
      $save = $this->save(array('word_id' => $word_id, 'text' => $this->getText($word_id), 'mistake' => 0));
      return $save['Game']['id']; 
   }

在本地主机上,我使用了 MySQL-Client-Version: mysqlnd 5.0.8-dev - 20102224 - $Revision: 310735 $ 和 PHP 版本 5.3.8。

在服务器上,我使用 MySQL-Client-Version: 5.1.62 和 PHP Version 5.3.17。

非常感谢您的帮助!

编辑:模型“游戏”:

class Game extends AppModel {
   public $name = 'Game';
   public $belongsTo = 'Word';
   public $searchedWord = '';

   public function addGame() { // Create new game
      $word_id = $this->Word->getWord_id();
      $save = $this->save(array('word_id' => $word_id, 'text' => $this->getText($word_id), 'mistake' => 0));
      return $save['Game']['id']; // Build the hangman
    }
}

当我调试 $this->Game 时,输出是:

object(AppModel) {
        useDbConfig => 'default'
        useTable => 'games'
        id => null
        data => array()
        schemaName => null
        table => 'games'
        primaryKey => 'id'
        validate => array()
        validationErrors => array()
        validationDomain => null
        name => 'Game'
        alias => 'Game'
        tableToModel => array(
            'games' => 'Game'
        )
        cacheQueries => false
        belongsTo => array()
        hasOne => array()
        hasMany => array()
        hasAndBelongsToMany => array()
        actsAs => null
        Behaviors => object(BehaviorCollection) {
            modelName => 'Game'
            defaultPriority => (int) 10
        }
        whitelist => array()
        cacheSources => true
        findQueryType => null
        recursive => (int) 1
        order => null
        virtualFields => array()
        __backAssociation => array()
        __backInnerAssociation => array()
        __backOriginalAssociation => array()
        __backContainableAssociation => array()
        findMethods => array(
            'all' => true,
            'first' => true,
            'count' => true,
            'neighbors' => true,
            'list' => true,
            'threaded' => true
        )
}
4

3 回答 3

3

通常,如果发生此错误,您没有模型实例,而是您处理的应用程序模型实例。app模型实例没有add()方法,直接用add()查询db。

所以请确保您的模型正确包含在内。由于您没有向我们展示如何调用该方法的代码(以及如何使控制器可以使用该模型),但我无法提供任何具体建议。

如果您手动包含它:

$this->ModelName = ClassRegistry::init('ModelName');
于 2012-09-29T16:27:04.610 回答
0

add是 MySQL 中的保留字,您可能在没有“转义”的 SQL 查询中使用它。

检查您的数据库中是否有任何名为add的字段。

于 2012-09-29T15:20:52.133 回答
0

我刚遇到这个错误,我觉得很愚蠢。我敢肯定这个问题很久以前就已经解决了,但万一其他人遇到它......

使用您的示例,我将基本上展示我在 Controller 中也愚蠢地做了什么,以及它如何导致您遇到的相同类型的错误:

 public function index($gameid = null, $letter = null) {
      if ($gameid == null) {
           // New game
           $gameid = $this->Game->addGame();
      }
 }

由于您已经拥有实例(控制器类)并且您没有调用addGame此处的 Model 方法,而是调用 Controller 的方法,您只需Game->从单行命令中删除 。

 $gameid = $this->addGame();

简单易行的监督。也就是说,如果您将 addGame 方法移至您的 Model 类,它可能会按预期工作。:)

于 2014-09-15T20:40:49.663 回答