Cakephp SQLSTATE [42000]:语法错误或访问冲突:1064

时间:2014-02-03 07:51:47

标签: php mysql cakephp find

我收到了这个错误:

  

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

在我的OrderItems控制器中添加此行时会发生此错误。

$products = $this->OrderItem->Product->find('all');

我不知道要改变什么。

如果我尝试$products = $this->OrderItem->Product->find('list');,错误就消失了。但我需要使用find('all')方法。

任何人都可以帮助我。提前谢谢。

SET ORIGIN

  1. APP \ Vendor \ dompdf \ include \ stylesheet.cls.php第218行→模型 - > __调用(字符串,数组)

    'set_origin' 阵列(     (int)0 => (int)1 )

  2. 2.APP \ Vendor \ dompdf \ include \ stylesheet.cls.php第218行→Style-> set_origin(整数)

        else
          $this->_styles[$key] = clone $style;
    
        $this->_styles[$key]->set_origin( $this->_current_origin );
    
      }
    

    PDF / default.thtml中

    <?php  
    require_once(APP . 'Vendor' . DS . 'dompdf' . DS . 'dompdf_config.inc.php'); 
    spl_autoload_register('DOMPDF_autoload'); 
    $dompdf = new DOMPDF(); 
    $dompdf->set_paper = 'A4';
    $dompdf->set_paper("a4", "landscape");
    $dompdf->load_html(utf8_decode($content_for_layout), Configure::read('App.encoding'));
    $dompdf->render();
    echo $dompdf->output();
    

    error.log中

    2014-02-03 09:29:17 Error: [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set_origin' at line 1
    Request URL: /mall/orderItems/receipt_pdf/201.pdf
    Stack Trace:
    #0 C:\xampp\htdocs\mall\lib\Cake\Model\Datasource\DboSource.php(460): PDOStatement->execute(Array)
    #1 C:\xampp\htdocs\mall\lib\Cake\Model\Datasource\DboSource.php(426): DboSource->_execute('set_origin', Array)
    #2 C:\xampp\htdocs\mall\lib\Cake\Model\Datasource\DboSource.php(666): DboSource->execute('set_origin', Array, Array)
    #3 C:\xampp\htdocs\mall\lib\Cake\Model\Datasource\DboSource.php(611): DboSource->fetchAll('set_origin', Array, Array)
    #4 C:\xampp\htdocs\mall\lib\Cake\Model\Model.php(799): DboSource->query('set_origin', Array, Object(Style))
    #5 C:\xampp\htdocs\mall\app\Vendor\dompdf\include\stylesheet.cls.php(218): Model->__call('set_origin', Array)
    #6 C:\xampp\htdocs\mall\app\Vendor\dompdf\include\stylesheet.cls.php(218): Style->set_origin(1)
    #7 C:\xampp\htdocs\mall\app\Vendor\dompdf\include\stylesheet.cls.php(1340): Stylesheet->add_style('html', Object(Style))
    #8 C:\xampp\htdocs\mall\app\Vendor\dompdf\include\stylesheet.cls.php(1077): Stylesheet->_parse_sections('html { ?  displ...')
    #9 C:\xampp\htdocs\mall\app\Vendor\dompdf\include\stylesheet.cls.php(307): Stylesheet->_parse_css('/**? * dompdf d...')
    #10 C:\xampp\htdocs\mall\app\Vendor\dompdf\include\dompdf.cls.php(535): Stylesheet->load_css_file('C:/xampp/htdocs...', 1)
    #11 C:\xampp\htdocs\mall\app\Vendor\dompdf\include\dompdf.cls.php(696): DOMPDF->_process_html()
    #12 C:\xampp\htdocs\mall\app\View\Layouts\pdf\default.ctp(8): DOMPDF->render()
    #13 C:\xampp\htdocs\mall\lib\Cake\View\View.php(945): include('C:\xampp\htdocs...')
    #14 C:\xampp\htdocs\mall\lib\Cake\View\View.php(907): View->_evaluate('C:\xampp\htdocs...', Array)
    #15 C:\xampp\htdocs\mall\lib\Cake\View\View.php(535): View->_render('C:\xampp\htdocs...')
    #16 C:\xampp\htdocs\mall\lib\Cake\View\View.php(479): View->renderLayout('', 'default')
    #17 C:\xampp\htdocs\mall\lib\Cake\Controller\Controller.php(952): View->render(NULL, NULL)
    #18 C:\xampp\htdocs\mall\lib\Cake\Routing\Dispatcher.php(194): Controller->render()
    #19 C:\xampp\htdocs\mall\lib\Cake\Routing\Dispatcher.php(162): Dispatcher->_invoke(Object(OrderItemsController), Object(CakeRequest), Object(CakeResponse))
    #20 C:\xampp\htdocs\mall\app\webroot\index.php(110): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
    #21 {main}
    

    OrderItem模型如下所示:

        <?php
    App::uses('AppModel', 'Model');
    /**
     * OrderItem Model
     *
     * @property Order $Order
     * @property Product $Product
     */
    class OrderItem extends AppModel {
    
    /**
     * Display field
     *
     * @var string
     */
        public $displayField = 'id';
    
    
        //The Associations below have been created with all possible keys, those that are not needed can be removed
    
    /**
     * belongsTo associations
     *
     * @var array
     */
        public $belongsTo = array(
            'Order' => array(
                'className' => 'Order',
                'foreignKey' => 'order_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            ),
            'Product' => array(
                'className' => 'Product',
                'foreignKey' => 'product_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            )
        );
    }
    

2 个答案:

答案 0 :(得分:2)

您的问题很可能是命名冲突,其中DOMPDF上下文中使用的类名与您已加载的模型类中的一个相同,从堆栈跟踪和DOMPDF代码判断,这将是一个名为{{1的类}}

问题仅在使用Style时出现,表明有问题的模型类与您的find('all')Product模型有某种关联(或者可能在Order类?),因为AppModel明确排除了关系(使用find('list'))。

如果您没有名为recursive = -1的模型类,请调试Style的类型以确定确切的类名,然后通过重命名模型或样式类来解决冲突(如果可能) )。

答案 1 :(得分:0)

我遇到了同样的问题。我有cakephp 2.4.6版本。我的本地是xampp但是服务器是lampp.I使用了我所有模型类的小写。例如app / Model / student.php,app / Model / group.php,app / Model / order.php,app / Model / list.php。

我什么时候使用$ this-&gt; Model-&gt; methodName();在我的控制器中,它在我的本地工作正常,但在服务器中提供了“Cakephp SQLSTATE [42000]:语法错误或访问冲突:1064”。

由于Linux区分大小写,因此无法使用小写的模型名称创建数据库对象。因此,它会产生与PDO相关的错误。

我用1stletter Upper更改了模型名称,如下所示 app / Model / Student.php,app / Model / Group.php,app / Model / Order.php,app / Model / List.php。

我的问题解决了。

如果您的问题在遵循上述问题后仍然存在,请提供反馈。