Laravel 5.1 DB::statement 命名绑定返回 "SQLSTATE[HY093]: Invalid parameter number"
Laravel 5.1 DB::statement with named binding returning "SQLSTATE[HY093]: Invalid parameter number"
我有以下代码:
DB::statement(
"DO $$
BEGIN
DELETE FROM sku_inativacao WHERE active = true;
INSERT INTO sku_inativacao (id_sku, id_motivo, created_at, updated_at) (
SELECT
id_sku,
CASE
WHEN data_u_venda is null AND estoque_atual = 0 THEN 1
WHEN data_u_venda < current_timestamp - interval '2 years' THEN 2
END id_motivo,
current_timestamp AS created_at,
current_timestamp AS updated_at
FROM
sku
WHERE
data_criacao::timestamp < current_timestamp - interval ':diasCriacao days'
and fase_vida < 3
AND
(data_u_venda is null AND
estoque_atual = 0)
OR
(data_u_venda < current_timestamp - interval '2 years')
) ON CONFLICT (id_sku) DO nothing;
END $$;",
['diasCriacao' => $this->diasCriacao ?? 90]
);
据我在文档中看到的那样,这是正确的,但是使用命名投标 returns:
SQLSTATE[HY093]: Invalid parameter number: :diasCriacao
并使用普通绑定 returns:
SQLSTATE[08P01]: <>: 7 ERROR:bind message supplies 1
parameters, but prepared statement "pdo_stmt_00000004" requires 0
我该怎么做才能解决这个问题?遗憾的是,我正在使用 Laravel 5.1。
已通过不使用 DB::statement 解决此问题。当与 DB::update 一起使用时,它使用提供的参数,它似乎是 Laravel 5.1
中的错误
我有以下代码:
DB::statement(
"DO $$
BEGIN
DELETE FROM sku_inativacao WHERE active = true;
INSERT INTO sku_inativacao (id_sku, id_motivo, created_at, updated_at) (
SELECT
id_sku,
CASE
WHEN data_u_venda is null AND estoque_atual = 0 THEN 1
WHEN data_u_venda < current_timestamp - interval '2 years' THEN 2
END id_motivo,
current_timestamp AS created_at,
current_timestamp AS updated_at
FROM
sku
WHERE
data_criacao::timestamp < current_timestamp - interval ':diasCriacao days'
and fase_vida < 3
AND
(data_u_venda is null AND
estoque_atual = 0)
OR
(data_u_venda < current_timestamp - interval '2 years')
) ON CONFLICT (id_sku) DO nothing;
END $$;",
['diasCriacao' => $this->diasCriacao ?? 90]
);
据我在文档中看到的那样,这是正确的,但是使用命名投标 returns:
SQLSTATE[HY093]: Invalid parameter number: :diasCriacao
并使用普通绑定 returns:
SQLSTATE[08P01]: <>: 7 ERROR:bind message supplies 1 parameters, but prepared statement "pdo_stmt_00000004" requires 0
我该怎么做才能解决这个问题?遗憾的是,我正在使用 Laravel 5.1。
已通过不使用 DB::statement 解决此问题。当与 DB::update 一起使用时,它使用提供的参数,它似乎是 Laravel 5.1
中的错误