php - 我使用 if else then 的语法有错误

标签 php mysql sql

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

            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();

但是我得到了错误


Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS ( SELECT * FROM pages_staff WHERE pages_admin_page =' at line 1 in C:\xampp\htdocs\application\model\EmployeesModel.php on line 468
{"success":false,"error":"There was an error adding permissions to this user"}

我该如何解决这个问题?

最佳答案

使用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);

关于php - 我使用 if else then 的语法有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33898747/

相关文章:

mysql - 通过 Entity Framework 中的多个表获取值?

php - 为什么mysql查询没有返回正确的金额

MySql 按其他列上的不同初始值聚合

mysql - SQL 如何通过 INNER JOIN 更新 -

PHP:从 xml 生成数组时存在非法偏移类型

mysql - 在字段名称周围使用反引号

javascript - JSONP——我到底要怎么使用它?

sql - 如何在 SQL Server 2008 表中创建计算列

php - .csv 文件导入 mysql

php - 如何在 mysql 上找到我的主机和用户名?