带有PHP变量的SQL IF STATEMENT

时间:2013-11-14 21:34:05

标签: php mysql sql database

我正在尝试使用如上所述的SQL条件进行单个查询:

首先我们假设我们有PHP变量$reco,它可以让我们在需要时更新数据:

mysql_query("
INSERT INTO app_table (views, average)
VALUES
(
IF($reco = 'yes', '$views', views),
IF($reco = 'yes', '$aver', average)
)
ON DUPLICATE KEY UPDATE
views = IF($reco = 'yes', $views, views),
average = IF($reco = 'yes', $aver, average)
");

问题是$reco在查询中不能正常工作,但是一列表可以工作,那么如何才能使它与PHP变量一起工作?

例如,如果我在桌子内部就会像这样工作:

请注意,我在表格中没有$ reco in php变量。

mysql_query("
INSERT INTO app_table (views, average)
VALUES
(
IF(reco = 'yes', '$views', views),
IF(reco = 'yes', '$aver', average)
)
ON DUPLICATE KEY UPDATE
views = IF(reco = 'yes', $views, views),
average = IF(reco = 'yes', $aver, average)
");

2 个答案:

答案 0 :(得分:0)

我认为最简单的方法是完全用PHP进行字符串比较:

if ($reco == 'yes') {
   $views = $views_value;
   $average = $average_value;
}
else {
   $views = $views_default;
   $average = $average_default;
}

//escape your $views and $average strings, if necessary
$query = "INSERT INTO app_table (views, average) VALUES ('$views', '$average') ON DUPLICATE KEY UPDATE //whatever";

答案 1 :(得分:0)

好吧,如果它是原理的证明,你仍然希望在SQL端进行:

$query = "... IF('$reco' = 'yes', '$views' ...";

请注意$ reco附近的报价。因此,如果$ reco为“是”,则查询将被解释为... IF ('yes' = 'yes', 'some_value' ...