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) "さとう" }
コメント