Php 为什么sql给我错误;无效参数编号:未定义参数";
今天我得到错误无效参数编号:更新数据时,我的yii应用程序中未定义参数。然后我知道我的sql数据库表列包含带有“-”符号的名称,即“table post”等 然后我把“-”改成了“u”,一切正常 这是查询片段(我将“-”替换为“\”)Php 为什么sql给我错误;无效参数编号:未定义参数";,php,mysql,sql,yii,Php,Mysql,Sql,Yii,今天我得到错误无效参数编号:更新数据时,我的yii应用程序中未定义参数。然后我知道我的sql数据库表列包含带有“-”符号的名称,即“table post”等 然后我把“-”改成了“u”,一切正常 这是查询片段(我将“-”替换为“\”) 有人能解释为什么这个例子显示错误吗?非常感谢。在您的情况下,表名中的“-”将被视为计算,而不是实际表名的一部分。这背后的原因是MySQL只能为一个字符/单词提供一个函数,并且不知道在查询的特定位置实际要使用哪个函数 在MySQL中,存在许多这样的特殊字符或保留字。
有人能解释为什么这个例子显示错误吗?非常感谢。在您的情况下,表名中的“-”将被视为计算,而不是实际表名的一部分。这背后的原因是MySQL只能为一个字符/单词提供一个函数,并且不知道在查询的特定位置实际要使用哪个函数 在MySQL中,存在许多这样的特殊字符或保留字。每次使用其中一个时,都必须使用背景标记 反标记用于表和列标识符,但仅当标识符为a时,或当标识符包含空格字符或超出限制集的字符时(见下文),才有必要使用反标记。通常建议尽可能避免使用保留关键字作为列或表标识符,以避免引用问题 ,则不需要使用以下字符集引用(反勾选)标识符: ASCII:
[0-9,a-z,a-z$”
(基本拉丁字母,数字0-9,美元,下划线)
您可以使用该集合之外的字符作为表或列标识符,例如包括空格,但必须引用(反勾选)它们
在您的情况下,使用“table post”(backticks!)而不是table post应该可以根据 仅允许以下字符作为非引号标识符 ASCII:[0-9,a-z,a-z$389;](基本拉丁字母,数字0-9,美元,下划线) 扩展:U+0080。。U+FFFF
-
ANSI(45)不允许作为有效标识符,除非它用倒勾(``)或双引号(“”)引用,而倒勾(``)或双引号(“”)与ANSI SQL兼容
带引号的标识符中允许的字符包括完整的Unicode基本多语言平面(BMP),U+0000除外:
ASCII:U+0001。。U+007F
你能提供一个查询失败的例子吗?还要为你正在使用的DBMS(Postgres,Oracle,…)添加一个标记注意:如果MySQL
sql\u模式
包括ANSI\u引号
,那么标识符可以用双引号括起来,而不是倒勾。这个答案值得奖励。
/* 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);
}