2013-08-07 2 views
0

У меня есть запрос, написанный для редактирования конкретной строки ROW по отношению к ID. Я использую функцию UPDATEALL() для обновления моей записи.UpdateAll не работает в CakePHP

это общий синтаксис, используемый в CakePHP, и я использую этот же синтаксис ниже

$this->Ticket->updateAll(
    array('Ticket.status' => "'closed'"), 
    array('Ticket.customer_id' => 453) 
); 

Мой код однако выглядит следующим образом.

$this->Invoicecustomers->updateAll(
array(
'user_id'=> $_GET['user_id'], 
'inv_id' => $_GET['inv_id'] 
),array(
'Invoicecustomers.user_id'=> $_GET['user_id'], 
'Invoicecustomers.inv_id' => $_GET['inv_id']) 
); 

$_GET['user_id'] & $_GET['inv_id'] извлекаются из URL Он бросает мне ошибку, когда я запускаю функцию редактирования.

Также, если указано: $_GET['user_id'] & $_GET['inv_id'], результаты не пустые. Я посылаю здесь нулевые данные.

Я получаю идеальный ответ для значений, переданных так:

$this->loadModel('Invoicecustomer'); 
     $cust = $this->Invoicecustomer->find('all',array(
     'conditions' => array('Invoicecustomer.inv_id' => $_GET['inv_id']) 
     )); 
     /*$log = $this->Invoicecustomer->getDataSource()->getLog(false, false); 
     debug($log);*/ 
     echo "we are getting User_id as <strong>".$cust[0]['Invoicecustomer']['user_id'] . "</strong> and inv_id as <strong>". $cust[0]['Invoicecustomer']['inv_id']."</strong>"; 

Чтобы убедиться, что это то, что я получаю, когда я печатаю массив для приведенного выше запроса

Array 
(
    [0] => Array 
     (
      [Invoicecustomer] => Array 
       (
        [id] => 34 
        [user_id] => abc 
        [group_id] => 346027119 
        [address1] => Corte Madera 
        [address2] => CA 
        [address3] => 94925 
        [comment] => invoice default comment 
        [cust_name] => Daniel Higgins 
        [date1] => 2013-08-06 19:41:11 
        [email] => [email protected] 
        [inv_id] => 1030 
        [tax_include] => NO 
        [tax_rate] => 5.00 
        [datastatus] => Admin 
        [mobile] => 555-478-7672 
        [sentstatus] => Not Sent 
        [status] => Unpaid 
        [street] => 332 Laguna Street 
        [paidamount] => 0.00 
        [balanceamount] => 0.00 
        [voidstatus] => unpaid 
        [signature] => nitin236090907.jpg 
        [imagepath] => http://192.168.1.100/cakephp_new/app/webroot/img/Invoicecustomer/346027119/abc/ 
       ) 

     ) 

) 

Это моя ошибка ЭКРАН Error: 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

SQL Query: 
     UPDATE `cakephpdb`.`invoicecustomers` AS `Invoicecustomer` SET `Invoicecustomer`.`user_id` = nitin, `Invoicecustomer`.`group_id` = 346027119, `Invoicecustomer`.`address1` = Atlanta, `Invoicecustomer`.`address2` = GA, `Invoicecustomer`.`address3` = 30303, `Invoicecustomer`.`comment` = invoice default comment, `Invoicecustomer`.`cust_name` = nitin ksagar13, `Invoicecustomer`.`email` = [email protected], `Invoicecustomer`.`inv_id` = 1030, `Invoicecustomer`.`tax_include` = NO, `Invoicecustomer`.`tax_rate` = 5.00, `Invoicecustomer`.`datastatus` = Admin, `Invoicecustomer`.`mobile` = 888-555-5512, `Invoicecustomer`.`sentstatus` = Not Sent, `Invoicecustomer`.`status` = Unpaid, `Invoicecustomer`.`street` = 3494 Kuhl Avenue, `Invoicecustomer`.`paidamount` = 0.00, `Invoicecustomer`.`balanceamount` = 0.00, `Invoicecustomer`.`voidstatus` = unpaid, `Invoicecustomer`.`signature` = nitin885659375.jpg, `Invoicecustomer`.`imagepath` = http://192.168.1.100/cakephp_new/app/webroot/img/Invoicecustomer/346027119/nitin/ WHERE `Invoicecustomer`.`user_id` = 'nitin' AND `Invoicecustomer`.`group_id` = '346027119' AND `Invoicecustomer`.`inv_id` = '1030' 

Notice: 
    If you want to customize this error message, create app/View/Errors/pdo_error.ctp 

Stack Trace 

    CORE/Cake/Model/Datasource/DboSource.php line 460 → PDOStatement->execute(array) 
    CORE/Cake/Model/Datasource/DboSource.php line 426 → DboSource->_execute(string, array) 
    CORE/Cake/Model/Datasource/Database/Mysql.php line 379 → DboSource->execute(string) 
    CORE/Cake/Model/Model.php line 2372 → Mysql->update(AppModel, array, null, array) 
    APP/Controller/InvoicecustomersController.php line 164 → Model->updateAll(array, array) 
    [internal function] → InvoicecustomersController->editInvoiceCustomer() 
    CORE/Cake/Controller/Controller.php line 486 → ReflectionMethod->invokeArgs(InvoicecustomersController, array) 
    CORE/Cake/Routing/Dispatcher.php line 187 → Controller->invokeAction(CakeRequest) 
    CORE/Cake/Routing/Dispatcher.php line 162 → Dispatcher->_invoke(InvoicecustomersController, CakeRequest, CakeResponse) 
    APP/webroot/index.php line 109 → Dispatcher->dispatch(CakeRequest, CakeResponse) 

Является ли мой синтаксис неправильно в ny way.?

ответ

1

В результате SQL, кажется, есть некоторые ошибки, например, он содержит

`Invoicecustomer`.`user_id` = nitin 

Хотя Нитин должна быть между qoutes. Если CakePHP генерирует этот SQL (что, по-видимому, это делает), кажется, что поля в вашей базе данных не определены правильно. Например, обычно user_id будет INT или bigINT), но вы используете его как CHAR, и в этом случае ваша модель базы данных должна соответствовать этому. В противном случае CakePHP может генерировать неверный запрос, как и сейчас.

На самом деле, если я прав, кажется, что все ваши столбцы таблицы определены как INT, а не как данные, которые вы хотите сохранить в них.

1
Try... 
$user_id = $_GET['user_id']; 
$this->Invoicecustomers->updateAll(
array(
'user_id'=> "'$user_id'", 
'inv_id' => $_GET['inv_id'] 
),array(
'Invoicecustomers.user_id'=> "'$user_id'", 
'Invoicecustomers.inv_id' => $_GET['inv_id']) 
); 
Смежные вопросы