【问题标题】:I have an error in my syntax using if else then使用 if else then 我的语法有错误
【发布时间】:2016-02-27 04:40:18
【问题描述】:

如果存在其他插入,我正在尝试更新,但收到错误这是我的查询:

            IF EXISTS
            (
                SELECT * FROM pages_staff 
                WHERE pages_admin_page = :page
                AND pages_admin_type = :type
                AND pages_admin_user = :user
            ) 
            THEN 
            BEGIN 
                UPDATE pages_staff
                SET pages_admin_page = :page,
                    pages_admin_type = :type,
                    pages_admin_user = :user,
                    pages_admin_permissions = :permission
                WHERE pages_admin_page = :page
                AND pages_admin_type = :type
                AND pages_admin_user = :user
            END
            ELSE 
            BEGIN
                INSERT INTO pages_staff
                (
                    pages_admin_page,
                    pages_admin_type,
                    pages_admin_user,
                    pages_admin_permissions
                )
                VALUES
                (
                    :page, 
                    :type, 
                    :user, 
                    :permission
                );
            END

这是我的 PHP:

    //iniate sql
    $add_staff = $database->prepare($sql);  

    //bind params
    $user = Session::get('id');
    $add_staff->bindParam(":page", $page, PDO::PARAM_INT);
    $add_staff->bindParam(":type", $type, PDO::PARAM_STR);
    $add_staff->bindParam(":user", $user, PDO::PARAM_INT);

    //what permission are they being given
    switch($permission):
        case 'admin':
            $permission = 'admin';
        break;
        case 'editor':
            $permission = 'editor';
        break;
        case 'moderator':
            $permission = 'moderator';      
        break;
        case 'advertiser':
            $permission = 'advertiser';
        break;
        case 'analyst':
            $permission = 'analyst';
        break;
        default: exit;
    endswitch;

    //bind last param and execute
    $add_staff->bindParam(":permission", $permission, PDO::PARAM_STR);
    $add_staff->execute();

但我得到了错误


警告:PDOStatement::execute(): SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 中有错误 句法;检查与您的 MySQL 服务器版本相对应的手册 在 'IF EXISTS 附近使用正确的语法 ( 选择 * 从 pages_staff WHERE pages_admin_page =' 在第 1 行的 C:\xampp\htdocs\application\model\EmployeesModel.php468
{"success":false,"error":"添加时出错 此用户的权限”}

我该如何解决这个问题?

【问题讨论】:

标签: php mysql sql


【解决方案1】:

使用insert on duplicate key update:

INSERT INTO pages_staff(pages_admin_page, pages_admin_type, pages_admin_user, pages_admin_permissions)
    VALUES (:page, :type, :user, :permission)
ON DUPLICATE KEY UPDATE pages_admin_permissions = :permission;

然后使用唯一索引/约束来防止重复:

CREATE UNIQUE INDEX unq_pages_staff_3 ON pages_staff(pages_admin_page, pages_admin_type, pages_admin_user);

【讨论】:

    猜你喜欢
    • 2020-03-15
    • 1970-01-01
    • 2015-11-18
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多