今天,我得到了错误无效的参数号:参数没有在我的yii应用程序中定义,同时更新数据。然后,我了解到我的sql数据库表列包含"-“符号i.e " table -post”等名称。
然后我用"_“换了"-”,一切都正常了。
这是查询片段(我将"-“替换为"_")
/* percentage losses senser*/
$attributes['totlcommloss_sensor'] = $_POST['totlcommloss_sensor'];
$attributes['asp_hour_sensor']= $_POST['asp-hour_sensor'];
$attributes['asp_daily_sensor'] = $_POST['asp-daily_sensor'];
$attributes['asp_weekly_sensor']= $_POST['asp-weekly_sensor'];
$attributes['asp_monthly_sensor'] = $_POST['asp-monthly_sensor'];
$attributes['asp_5_day_senser']= $_POST['asp_5_day_senser'];
/* cost losses */
//$attributes['costlosshourly'] = $_POST['acs-hourly'];
if (0 != intval($user['id'])) {
$command->update('alarm_settings', $attributes, 'id=:id', array(':id' => intval($user['id'])));
}
else {
$NumberOfRowsEffected = $command->insert('alarm_settings', $attributes);
}有人能解释一下为什么这个例子会出现错误吗?在此之前,非常感谢您。
发布于 2015-08-05 16:52:27
在您的示例中,表名中的“-”将被视为计算,而不是实际表名的一部分。这背后的原因是,MySQL只能给一个字符/单词一个函数,并且不知道您实际上想在查询中的特定位置使用哪个函数。
在MySQL中,存在着大量的特殊字符或保留字。每次使用其中之一时,必须使用backticks。
Backticks用于表和列标识符,但只有在标识符是MySQL保留关键字时,或者当标识符包含的空格字符或字符超出有限集时(见下文),通常建议尽可能避免使用保留关键字作为列或表标识符,以避免引用问题。
根据MySQL文档,您不需要使用以下字符集引用(回勾)标识符:
[0-9,a-z,A-Z$_](基本拉丁字母,数字0-9,美元,下划线)
您可以使用该集合以外的字符作为表或列标识符,例如,包括空格,但是必须引用(回勾)它们。
在您的情况下使用table-post (backticks!)而不是表柱应该可以工作。
发布于 2015-08-11 05:02:10
基于模式对象名上的mysql文档,只允许以下字符作为非引号标识符。
ASCII:_ 扩展: U+0080 .U+FFFF
- ANSI(45)不允许作为有效的标识符,除非它带有与ANSI_QUOTES兼容的反引号()或双引号(“”)。
引号中允许的字符包括完整的Unicode基本多语言平面(BMP),但U+0000除外: U+0001 .U+007F
https://stackoverflow.com/questions/31834053
复制相似问题