phpをつかってMySqlに接続がしたいのですが推奨の方法はなになんでしょうか...
いままではMySqliというのでオブジェクト指向という方法を使ってきました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
公式のリファレンスでは、mysqliかPDO方式のどちらかを使うことを推奨されています。
どっちがいいの?っていうことなら、個人的には、PDO方式をお勧めします。
何故なら、万一ほかのデータベースに接続・置き換えるとなった場合でも書き換えが容易であるという点があげられます。
使うデータベースはMySQLだけですよという場合でも、結果が取り出しやすく、名前付きプレースホルダが使えるため、クエリが長くなり複数のプレースホルダーを使っていたとしてもクエリが見やすくなる効果があります。
下のソースコードは、PDOを利用してMySQLのデータベースに接続した後、SELECT文を実行した例です。
php
1$pdo =New PDO('mysql:host=[データベースのIPアドレスまたはホスト名], 2dbname=[データベース名];charset=[文字コード]','UseName','Password', 3array(PDO::ATTR_EMULATE_PREPARES => false)); 4 } catch (PDOException $e) { 5 echo('データベース接続失敗。'.$e->getMessage()); 6 return; 7 } 8 $stmt = $pdo -> prepare("SELECT * FROM テーブル名 WHERE ID = :id ORDER BY no ASC"); 9 $stmt -> bindValue(":id","0"); 10 $stmt -> execute(); 11 $listmembers=$stmt -> fetchALL(PDO::FETCH_ASSOC); 12 return $listmembers;
コンストラクタ内の連想配列は、接続時のオプションを連想配列で渡しています。
今回の場合は、プリペアードステートメントのエミュレーションを使わないという意味です。
接続後のソースコードを簡単に説明すると($stmt = $pdo -> prepareから始まる所のことです)
- prepareで不完全なクエリ文をサーバーに送信します。(この時点では、まだ実行されません)
- bindValueで:idの部分に置き換える値を入力します(この**":id"**の事を名前付きプレースホルダと呼びます)
- execute()で名前付きプレースホルダが実際の数値に置き換えられ、実行されます。
- 最後に、帰ってきた結果をすべて取得しています。(fetchALL()の引数を指定して、形式を選んで結果を取り出すことが可能です。今回の場合は連想配列で結果が取り出せます)
参考URL(PDOで接続、SELECT、プリペアドステートメントとは(PHPでMySQLに接続))
http://qiita.com/tabo_purify/items/d1166236f3b03c7be60d
投稿2016/02/14 12:56
総合スコア24
0
現状 Mysqli を使っているとのことですので、無理に PDO に乗り換える必要はないかと思います。
Mysqli は PDO に比べ動作が早く、マルチクエリが使えたりエラーを例外としてスローできるなど、PDO ではできないこともできます。
PDO も汎用性が高く、MySQL 以外に乗り換えることがあればよいのですが、DB 自体を MySQL 以外にすぐに乗り換える等の理由が無いのであれば、そのまま Mysqli を使い続けたほうが良いかと思います。
投稿2016/03/11 14:54
編集2016/03/11 14:56総合スコア12
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
投稿2016/02/14 11:25
総合スコア16
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。