我有一个查询,我想在其中使用 session 变量,而不必一遍又一遍地输入数字以在 MySQL Workbench 中进行调试。
这是查询:
SET @userId = 2;
SELECT
id,
reply_to,
from_id,
to_id,
message,
created_time,
is_viewed,
IF(from_id = @userId, to_id, from_id) AS partnerId,
IF(from_id = @userId, data->>'$.toUsername', data->>'$.fromUsername') AS partnerUsername,
IF(from_id = @userId, data->>'$.toImage', data->>'$.fromImage') AS partnerImage
FROM message
WHERE
(from_id = @userId OR to_id = @userId) AND
is_active = 1
ORDER BY id DESC
LIMIT 50;
该查询返回 0 个结果。但是如果我把它改成:
SELECT
id,
reply_to,
from_id,
to_id,
message,
created_time,
is_viewed,
IF(from_id = 2, to_id, from_id) AS partnerId,
IF(from_id = 2, data->>'$.toUsername', data->>'$.fromUsername') AS partnerUsername,
IF(from_id = 2, data->>'$.toImage', data->>'$.fromImage') AS partnerImage
FROM message
WHERE
(from_id = 2 OR to_id = 2) AND
is_active = 1
ORDER BY id DESC
LIMIT 50;
然后一切都按预期工作。为什么它不像我期望的那样工作?
最佳答案
来自 MySQL docs :
User variables are intended to provide data values. They cannot be used directly in an SQL statement as an identifier or as part of an identifier, such as in contexts where a table or database name is expected, or as a reserved word such as SELECT.
因此您只能在您的应用程序代码中使用变量。 例如 PHP:
$query = "SELECT
id,
reply_to,
from_id,
to_id,
message,
created_time,
is_viewed,
IF(from_id = :userId, to_id, from_id) AS partnerId,
IF(from_id = :userId, data->>'$.toUsername', data->>'$.fromUsername') AS partnerUsername,
IF(from_id = :userId, data->>'$.toImage', data->>'$.fromImage') AS partnerImage
FROM message
WHERE
(from_id = :userId OR to_id = :userId) AND
is_active = 1
ORDER BY id DESC
LIMIT 50";
$stmt = $pdo->prepare($query);
$stmt->execute([':userId' => 2]);
$data = $stmt->fetchAll();
关于mysql - 不能在查询中使用 MySQL session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47031256/