【问题标题】:Specify column name through a prepared statement通过准备好的语句指定列名
【发布时间】:2014-05-16 04:56:50
【问题描述】:

这个想法是查询应该以某种指定的语言选择某些项目的名称和描述。字符串存储在string 简单表中,该表有一个 id 列和一个用于每种语言的列(fx:'us' 和 'fr')。

用户可以通过 API 指定他们想要的语言,这意味着必须使用 PHP 的预处理语句进行查询。

以下代码显示了我希望它如何工作。问题是name.?description.? 在绑定参数时不会评估为有效列。

$query = $mysqli->prepare(
   'SELECT name.?, description.?
    FROM item
    JOIN string AS name ON item.nameId = name.id
    JOIN string AS description ON item.descriptionId = description.id
    WHERE item.id = ?');

$query->bind_param('ssi', $lang, $lang, $id);

我想避免在查询数据库之前检查语言$lang 是否有效。这是为了避免每次在数据库中添加新的语言列时都必须更新代码。

是否可以通过prepared statement指定列名?

【问题讨论】:

    标签: php mysqli prepared-statement


    【解决方案1】:

    似乎答案是否定的。 PDO : Select using a prepared statement returns column name

    为避免在代码中进行检查,可以添加一个包含所有语言的单独表。

    语言

    (id, language)
    1, "us"
    2, "fr"
    

    字符串

    (id, stringId, languageID, str)
    
    1, 4, 1, "Hello"
    2, 4, 2, "Bonjour"
    3, 5, 1, "Yes"
    4, 5, 2, "Oui"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多