【问题标题】:PHP/MySql if-operator within select statement选择语句中的 PHP/MySql if 运算符
【发布时间】:2017-12-05 09:34:23
【问题描述】:

我有几个表的数据库,都有一个同名的列。我想以这种方式从该列中获取数据,因此当从特定表(“国家”)中获取数据时,它会附加字符串,否则只会获取数据。 这是我的方法

public function getInfo($table, $id) {
    $operate = $this->pdo->prepare("select if({$table}=='countries', 'concat('capital', city)', 'city') city from {$table} where id= {$id}");
        $operate->execute();

        return $operate->fetchObject();
    }

我在一个类中有几个方法,一切正常。这个也可以在没有 if 语句的情况下工作,问题似乎出在这个表达式上:{$table}=='countries'。但是,我找不到我的错误在哪里。我是 php 新手,很高兴知道这个表达式有什么问题以及我该如何解决它。

【问题讨论】:

  • 你试过用反引号替换大括号吗?
  • 不幸的是,它们并没有太大的不同

标签: php mysql database if-statement select-query


【解决方案1】:

不幸的是,PHP 中的字符串插值${}-方式仅支持一种表达式,例如从数组中获取值。不能在此构造中使用 if 语句或三元运算符。

这是一个选项:

$column = ($table == 'countries')? "concat('capital',city)":"city";
$operate = this->pdo->prepare("select $column from {$table} where id= {$id}");

【讨论】:

  • 谢谢!不敢相信它终于奏效了。只有在使用 concat 时,它才使用逗号而不是加号 - concat('capital', city)