CakePHP 2.x没有将字符串视为字符串

时间:2018-01-17 12:05:08

标签: cakephp cakephp-2.0

在控制器方法中,我有以下代码:

$this->loadModel('Navigation');
$this->Navigation->updateAll(array('Navigation.name' => $this->request->data['Tag']['name']), array('Navigation.tag_id' => $this->request->data['Tag']['id']));

它产生以下错误:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column ' 
Germany' in 'field list'

SQL Query: UPDATE `dev_hub_subdb_v5_interface`.`navigations` AS 
`Navigation` SET `Navigation`.`name` = Germany WHERE 
`Navigation`.`tag_id` = 3

原因似乎是,当尝试将“德国”写入名为name的列时,它并不将“德国”视为字符串。varchar(255)是MySQL中的var_dump字段。

但是,数据是字符串格式。如果我array(2) { ["Save"]=> string(6) "Update" ["Tag"]=> array(2) { ["id"]=> string(1) "3" ["name"]=> string(7) "Germany" } } 要保存的请求数据,我会得到:

updateAll

为什么这不起作用?根据{{​​3}} myApp.config(function($stateProvider, $urlRouterProvider, $controllerProvider) { $stateProvider .state('home', { url : '/home', templateUrl : 'login/home.html' }) .state('dashboard',{ url : '/dashboard', templateUrl : 'dashboard.html', controller : 'DashboardCtrl', resolve : { loadPlugin : function($ocLazyLoad) { return $ocLazyLoad .load([ { name : 'css', insertBefore : '#app-level', files : [ '../static/vendors/bower_components/nouislider/jquery.nouislider.css', '../static/vendors/farbtastic/farbtastic.css', '../static/vendors/bower_components/summernote/dist/summernote.css', '../static/vendors/bower_components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css', '../static/vendors/bower_components/chosen/chosen.min.css' ] }, { name : 'vendors', files : [ '../static/vendors/input-mask/input-mask.min.js', '../static/vendors/bower_components/nouislider/jquery.nouislider.min.js', '../static/vendors/bower_components/moment/min/moment.min.js', '../static/vendors/bower_components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js', '../static/vendors/bower_components/summernote/dist/summernote.min.js', '../static/vendors/fileinput/fileinput.min.js', '../static/vendors/bower_components/chosen/chosen.jquery.js', '../static/vendors/bower_components/angular-chosen-localytics/chosen.js', '../static/vendors/bower_components/angular-farbtastic/angular-farbtastic.js' ] }, { name : 'myApp', files : [ '../static/scripts/controller/DashboardController.js' ] } ]) } } }) }); 接受2个数组:要保存的数据和条件。所以我看不出怎么写这个。

1 个答案:

答案 0 :(得分:0)

所以看起来你必须引用字符串,即使它们是字符串......

我上面提到的文档有一个相当差的解释/示例,但是说:

  

$fields数组接受SQL表达式。应使用DboSource::value()手动引用文字值。例如,如果您的某个模型方法正在调用updateAll(),那么您将执行以下操作:

$db = $this->getDataSource();
$value = $db->value($value, 'string');
$this->updateAll(
    array('Baker.status' => $value),
    array('Baker.status' => 'old')
);

我不知道这个例子意味着什么,因为它们似乎是用字符串两次更新Baker.status。像泥一样清楚!

无论如何,在我的情况下,在$this->request->data['Tag']['name']附近添加引号修复它:

$this->Navigation->updateAll(array('name' => "'".$this->request->data['Tag']['name']."'"), array('tag_id' => $this->request->data['Tag']['id']));