Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么sql给我错误;无效参数编号:未定义参数";_Php_Mysql_Sql_Yii - Fatal编程技术网

Php 为什么sql给我错误;无效参数编号:未定义参数";

Php 为什么sql给我错误;无效参数编号:未定义参数";,php,mysql,sql,yii,Php,Mysql,Sql,Yii,今天我得到错误无效参数编号:更新数据时,我的yii应用程序中未定义参数。然后我知道我的sql数据库表列包含带有“-”符号的名称,即“table post”等 然后我把“-”改成了“u”,一切正常 这是查询片段(我将“-”替换为“\”) 有人能解释为什么这个例子显示错误吗?非常感谢。在您的情况下,表名中的“-”将被视为计算,而不是实际表名的一部分。这背后的原因是MySQL只能为一个字符/单词提供一个函数,并且不知道在查询的特定位置实际要使用哪个函数 在MySQL中,存在许多这样的特殊字符或保留字。

今天我得到错误无效参数编号:更新数据时,我的yii应用程序中未定义参数。然后我知道我的sql数据库表列包含带有“-”符号的名称,即“table post”等

然后我把“-”改成了“u”,一切正常

这是查询片段(我将“-”替换为“\”)


有人能解释为什么这个例子显示错误吗?非常感谢。

在您的情况下,表名中的“-”将被视为计算,而不是实际表名的一部分。这背后的原因是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);
         }