错误:SQLSTATE [42000]:使用cakePHP语法错误或访问冲突

时间:2012-09-29 15:11:24

标签: mysql sql cakephp

我正在为我的应用程序使用框架cakePHP。我使用xampp在localhost上编程并尝试将其上传到我的网站上。它在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']; 
   }

在localhost上我使用了MySQL-Client-Version:mysqlnd 5.0.8-dev - 20102224 - $ Revision:310735 $和PHP Version 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
        )
}

3 个答案:

答案 0 :(得分:3)

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

因此请确保您的模型已正确包含在内。既然你没有向我们展示你如何调用方法的代码(以及你如何使模型可用于控制器),我不能提供任何具体的建议。

如果你手动包含它:

$this->ModelName = ClassRegistry::init('ModelName');

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我刚刚遇到这个错误,我感觉非常愚蠢。我相信很久以前就已经解决了这个问题,但是如果有其他人遇到它......

使用您的示例我将基本上展示我在控制器中所做的愚蠢行为以及它如何导致您遇到的同类错误:

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

由于您已经拥有实例(控制器类)并且您未在此处调用addGame的模型方法,而是调用Controller的方法,因此您只需删除Game->来自你的一行命令。

 $gameid = $this->addGame();

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