通过预准备语句指定列名

时间:2014-05-15 10:22:13

标签: php mysqli prepared-statement

这个想法是查询应该以某种指定的语言选择某个项目的名称和描述。这些字符串存储在一个简单的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语言。这是为了避免每次在数据库中添加新语言列时都必须更新代码。

是否可以通过预准备语句指定列名?

1 个答案:

答案 0 :(得分:0)

似乎答案是否定的。 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"