回答編集履歴

2 質問された部分を追記

shi_ue

shi_ue score 4383

2017/05/05 19:13  投稿

普通に`foreach`でやったらいいじゃないでしょうか?
```php
$id = 123;
$table_name = "テーブルの名前";
$youso = ["要素A","要素B","要素C"];
// どうしてもバッククォートで囲みたい場合はこうするしかないですが
$sql = [];
foreach ($youso as $y) {
 $sql[] = '`'.$y.'`';
}
$sql = "SELECT ". implode(',', $sql) . " FROM `{$table_name}` WHERE `id` = ?";
// 予約語とかを使っていない場合
$sql = "SELECT ". implode(',', $youso) . " FROM {$table_name} WHERE id = ?";
// でいいと思いますよ。
if ($stmt = $mysqli->prepare($sql)) {
 //条件値をSQLにバインド
 $stmt->bind_param("i", $id);
 //実行
 $stmt->execute();
 $result = $stmt->get_result();
 $row = $result->fetch_assoc();
 foreach ($youso as $y) {
   $$y = $row[$y];
 }
```取得できたかどうかとか、判断が入ってないですが、考え方としてこんな感じです。
`information_schema`を使えば、`$youso`の定義すらいらないですけど、クエリが一回増えるのでどうなんでしょうか。
`information_schema`を使えば、`$youso`の定義すらいらないですけど、クエリが一回増えるのでどうなんでしょうか。
追記
---
コメントで質問された以下の部分ですが、
```php
foreach ($youso as $y) {
 $$y = $row[$y];
}
```実際に展開されるとこのようになります。
```php
$要素A = $row['要素A'];
$要素B = $row['要素B'];
$要素C = $row['要素C'];
```[可変変数](http://php.net/manual/ja/language.variables.variable.php)と言います。
1 追記

shi_ue

shi_ue score 4383

2017/05/04 16:40  投稿

普通に`foreach`でやったらいいじゃないでしょうか?
```php
$id = 123;
$table_name = "テーブルの名前";
$youso = ["要素A","要素B","要素C"];
// どうしてもバッククォートで囲みたい場合はこうするしかないですが
$sql = [];
foreach ($youso as $y) {
 $sql[] = "`{$y}`";
 $sql[] = '`'.$y.'`';
}
$sql = "SELECT ". implode(',', $sql) . " FROM `{$table_name}` WHERE `id` = ?";
// 予約語とかを使っていない場合
$sql = "SELECT ". implode(',', $youso) . " FROM {$table_name} WHERE id = ?";
// でいいと思いますよ。
if ($stmt = $mysqli->prepare($sql)) {
 //条件値をSQLにバインド
 $stmt->bind_param("i", $id);
 //実行
 $stmt->execute();
 $result = $stmt->get_result();
 $row = $result->fetch_assoc();
 foreach ($youso as $y) {
   $$y = $row[$y];
 }
```取得できたかどうかとか、判断が入ってないですが、考え方としてこんな感じです。
```取得できたかどうかとか、判断が入ってないですが、考え方としてこんな感じです。
`information_schema`を使えば、`$youso`の定義すらいらないですけど、クエリが一回増えるのでどうなんでしょうか。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る