【问题标题】:How to make update query with parameters and CASE statement in Laravel 4如何在 Laravel 4 中使用参数和 CASE 语句进行更新查询
【发布时间】:2013-08-29 05:52:48
【问题描述】:

我正在尝试创建带有参数的 mysql UPDATE 查询。另外,如果字段不为空,我想附加到字段的末尾。为此,我使用 CASE 语句。 这是我在学说中的查询(来自 silex):

$query = "UPDATE table SET filed = (
CASE WHEN field = ''
THEN :param1
ELSE concat(field, :param1)
END)
WHERE id=:param2";
$app['db']['test_db']->executeUpdate($sql, array('param1' => $user_text, 'param2' => $selected_id));

现在我想将其转换为流利或原始查询,以便我可以在 Laravel 4 中使用它。

这是我的代码:

$param1 = "String..."; // user string
$param2 = 45; // id
DB:connection('test_db')->statement("UPDATE table SET field =(
case
    WHEN field=''
    THEN $param1 
    ELSE concat(field, $param1)
END)
WHERE id=$param2");

当我在 Laravel 中执行这个查询时,我看到了

语法错误或访问冲突:1064

任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql laravel laravel-4 fluent


    【解决方案1】:

    尝试使用raw() 运行它:

    DB::statement(
        DB::raw(
                    "UPDATE table SET field =
                        (
                            CASE
                                WHEN field=''
                                THEN ?
                                ELSE concat(field, ?)
                            END
                        )
                        WHERE id=?"
        ),
    
        array($param1, $param1, $param2)
    );
    

    【讨论】:

    • 当 $param1 文本很长并且有新行等时,此解决方案不起作用。它不会转义它。
    • 谢谢,这个成功了。我想我尝试了所有其他与原始语句的组合。我什至尝试获取 PDO 实例并从 PDO 级别执行此操作,但这会适得其反。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2021-05-20
    • 2023-03-08
    • 2016-04-10
    • 2011-02-14
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多