
PR
prepareを使用するqueryを使用する
// DB接続用の関数を呼び出し
$dbh = connectDb();
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
// SQL文の実行
$column = 'id';
$sql = "select :column from table";
$stmt = $dbh->prepare($sql);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->bindParam(':column', $column, PDO::PARAM_INT);
$stmt->execute();
// DB接続用の関数を呼び出し $dbh = connectDb(); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // SQL文の実行 $sql = "select id from table"; $stmt = $dbh->query($sql);
参考:prepareメソッド – PDOの利用 – PHP入門
fetchModeのデフォルトは$PDO::FETCH_BOTHに設定されているため、SQLを実行し取得した結果をforeachで配列に格納すると、テーブル名と割り振られた数字がキーとして重複した値を持ってしまう。
mysql> SELECT * FROM table;
id | name
—-+——–
1 | たなか
2 | さとう
(2 行)
// DB接続用の関数を呼び出し
$dbh = connectDb();
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$columns = [];
$sql = "select * from table";
$stmt = $dbh->query($sql);
foreach ($stmt as $row) {
$columns[] = $row;
}
var_dump($columns);
array(4) {
["id"]=>
int(1)
[0]=>
int(1)
["name"]=>
string(9) "たなか"
[1]=>
string(9) "たなか"
}
array(4) {
["id"]=>
int(2)
[0]=>
int(2)
["name"]=>
string(9) "さとう"
[1]=>
string(9) "さとう"
}
// DB接続用の関数を呼び出し
$dbh = connectDb();
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$columns = [];
$sql = "select * from table";
$stmt = $dbh->query($sql);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach ($stmt as $row) {
$columns[] = $row;
}
var_dump($columns);
array(2) {
["id"]=>
int(1)
["name"]=>
string(9) "たなか"
}
array(2) {
["id"]=>
int(2)
["name"]=>
string(9) "さとう"
}
コメント