「PHPでPDOを使ってMySQLから1件だけフィールドを取得したい場合」の編集履歴(バックアップ)一覧はこちら

PHPでPDOを使ってMySQLから1件だけフィールドを取得したい場合」(2015/08/18 (火) 23:03:02) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

配列で取得するのはよく見かけますが、1件だけの場合どうすればよいのでしょうか? たとえば更新ページの更新一覧にあるGETメソッドのリンクを押した際の表示するphpのコードです。7月18日記事 ~ ~ 目次 #contents ~ ~ ---- ~ *更新記事のテーブル設計 テーブルのカラムはそれぞれ、id,info_date,regi_date,title,text,url,status(id(主キー)、公開日、登録日、タイトル、テキスト内容、URL、status)だとします。 また、statusが2の場合、その記事は公開対象ということだとします。 ~ ~ *コード データベースの情報はconfig.phpファイルに保存しておきdefine関数でDB_NAMEやDB_HOSTを定義しているものだとします。また、idをGETメソッドで引き継いで、その情報を使ってデータベースにクエリを送信する状況だとするコードを書いていきたいと思います。 <?php require('config.php'); $dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST.';port='.DB_PORT.''; $user = DB_USER; $password = DB_PASSWORD; try{ $dbh = new PDO($dsn, $user, $password); }catch (PDOException $e){ print('Connection failed:'.$e->getMessage()); die(); } //GETメソッドの数値のフィルター。文字列等をいれられた場合なにも返さない。 $filter_id = filter_var($_GET[id],FILTER_SANITIZE_NUMBER_INT,FILTER_NULL_ON_FAILURE); $stmt = $dbh->prepare("SELECT * FROM テーブル名 WHERE id = :id AND status = '2'"); $stmt->bindValue(':id',$filter_id,PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(); ?> *HTML部分 あとは任意の位置に内容を張っていくだけです。 ~ HTML部 タイトル部分などに <h1><?php echo htmlspecialchars($result[title],ENT_QUOTES,"UTF-8"); ?></h1> や文字コード変換を含めるなら <h1><?php echo htmlspecialchars(mb_convert_encoding($result[title],"UTF-8","EUC-JP"),ENT_QUOTES,"UTF-8"); ?></h1> と書く。 あるいは テキスト部分を張りたいなら <p><?php echo nl2br(htmlspecialchars($result[text],ENT_QUOTES,"UTF-8")); ?></p> や文字コード変換を含めるなら <p><?php echo nl2br(htmlspecialchars(mb_convert_encoding($result[text],"UTF-8","EUC-JP"),ENT_QUOTES,"UTF-8")); ?></p> と改行を表示させるnl2br関数も書いていきます。 ~ ~ *まとめ idをフィルターし、それをbindValueでチェックし、一件だけの取得の場合fetch()を使うようにします。 idのフィルターはPDOによってチェックされるので必要ないかもしれませんが、著者のセキュリティ意識だと思ってください。 ~ ~ 以上
配列で取得するのはよく見かけますが、1件だけの場合どうすればよいのでしょうか? たとえば更新ページの更新一覧にあるGETメソッドのリンクを押した際の表示するphpのコードです。7月18日記事 ~ ~ 目次 #contents ~ ~ ---- ~ *更新記事のテーブル設計 テーブルのカラムはそれぞれ、id,info_date,regi_date,title,text,url,status(id(主キー)、公開日、登録日、タイトル、テキスト内容、URL、status)だとします。 また、statusが2の場合、その記事は公開対象ということだとします。 ~ ~ *コード データベースの情報はconfig.phpファイルに保存しておきdefine関数でDB_NAMEやDB_HOSTを定義しているものだとします。また、idをGETメソッドで引き継いで、その情報を使ってデータベースにクエリを送信する状況だとするコードを書いていきたいと思います。 <?php require('config.php'); $dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST.';port='.DB_PORT.''; $user = DB_USER; $password = DB_PASSWORD; try{ $dbh = new PDO($dsn, $user, $password); }catch (PDOException $e){ print('Connection failed:'.$e->getMessage()); die(); } //GETメソッドの数値のフィルター。文字列等をいれられた場合なにも返さない。 $filter_id = filter_var($_GET[id],FILTER_SANITIZE_NUMBER_INT,FILTER_NULL_ON_FAILURE); $stmt = $dbh->prepare("SELECT * FROM テーブル名 WHERE id = :id AND status = '2'"); $stmt->bindParam(':id',$filter_id,PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(); ?> *HTML部分 あとは任意の位置に内容を張っていくだけです。 ~ HTML部 タイトル部分などに <h1><?php echo htmlspecialchars($result[title],ENT_QUOTES,"UTF-8"); ?></h1> や文字コード変換を含めるなら <h1><?php echo htmlspecialchars(mb_convert_encoding($result[title],"UTF-8","EUC-JP"),ENT_QUOTES,"UTF-8"); ?></h1> と書く。 あるいは テキスト部分を張りたいなら <p><?php echo nl2br(htmlspecialchars($result[text],ENT_QUOTES,"UTF-8")); ?></p> や文字コード変換を含めるなら <p><?php echo nl2br(htmlspecialchars(mb_convert_encoding($result[text],"UTF-8","EUC-JP"),ENT_QUOTES,"UTF-8")); ?></p> と改行を表示させるnl2br関数も書いていきます。 ~ ~ *まとめ idをフィルターし、それをbindValueでチェックし、一件だけの取得の場合fetch()を使うようにします。 idのフィルターはPDOによってチェックされるので必要ないかもしれませんが、著者のセキュリティ意識だと思ってください。 ~ ~ 以上

表示オプション

横に並べて表示:
変化行の前後のみ表示: