mysqli のコーディング方法は2通りあります。
手続き型とオブジェクト型です。
私も初めて知りましたので、どのような違いが有るかを確認して行きたいと思います。
WordPress mysqli 手続き型
従来とよく似た mysqli_***() という書き方のようです。
インスタンス生成不要と説明されています。
こちらの接続は「MySQLと接続」で書いた通りです。
ちょっと進めて、最新の記事のタイトル10件を取得するPHPコードを書いてみたいと思います。
mysqliの手続き型で最新記事10件を取得するショートコード
//mysqli手続き型で最新記事10件を表示 function shortcode_GetNewPosts10(){ global $wpdb; $db_host = $wpdb->dbhost; //データベースホストの取得 $db_dbname = $wpdb->dbname; //データベース名 $db_user = $wpdb->dbuser; //データベース接続ユーザーの取得 $db_passwd = $wpdb->dbpassword; //データベース接続用パスワードの取得 $link = mysqli_connect($db_host, $db_user, $db_passwd, $db_dbname); if (!$link) { return '接続失敗です : ' . mysqli_connect_error() . ' | ' . mysqli_connect_errno(); } // データ取得 //プリペアドステートメントを作成します $stmt = mysqli_prepare($link, "SELECT DISTINCT post_title ,guid FROM {$wpdb->posts} where post_status='publish' and post_type='post' order by post_date DESC LIMIT ?"); if($stmt){ //パラメータをバインドします $ln = 10; mysqli_stmt_bind_param($stmt, "d", $ln); //クエリを実行します mysqli_stmt_execute($stmt); //結果変数をバインドします mysqli_stmt_bind_result($stmt, $post_title, $guid); //値を読み表を作成します $returnTable = "<table style='width:500px'><th'><td style='text-align:left;'>タイトル</td></th>"; while (mysqli_stmt_fetch($stmt)) { $a = '<a href=""'. $guid .'" target="_blank">' .$post_title . '</a>'; $returnTable = $returnTable . '<tr><td>' . $a . '</td></tr>'; } //ステートメントを閉じます mysqli_stmt_close($stmt); $returnTable .= '</table>'; } else { $error = mysqli_error($link); $errno = mysqli_errno($link); $returnTable = 'データ取得に失敗しました : ' . $error . ' | ' . $errno; } mysqli_close($link); return $returnTable; } add_shortcode('call_GetNewPosts10', 'shortcode_GetNewPosts10');
MYSQLIの手続き型で最新記事10件を取得するショートコードを呼び出す
上手く表示されていますか?
ちょっと複雑になってしまいましたが、WordPressのthe_title()関数を使わないとこんな感じになります。まぁ、あくまでも学習なので……
WordPress mysqli オブジェクト型
オブジェクト指向的な新しい書き方
インスタンス生成必要と説明されています。
こちらは始めてなのですが、とりあえず手続き型と同じことをやってみます。
MYSQLIのオブジェクト型で最新記事10件を取得するショートコード
//mysqliオブジェクト型で最新記事10件を表示 function shortcode_GetNewPosts10_2(){ global $wpdb; $db_host = $wpdb->dbhost; //データベースホストの取得 $db_dbname = $wpdb->dbname; //データベース名 $db_user = $wpdb->dbuser; //データベース接続ユーザーの取得 $db_passwd = $wpdb->dbpassword; //データベース接続用パスワードの取得 $link = new mysqli($db_host, $db_user, $db_passwd, $db_dbname); if (!$link) { return '接続失敗です : ' . mysqli_connect_error() . ' | ' . mysqli_connect_errno(); } // データ取得 //プリペアドステートメントを作成します $stmt = $link->prepare("SELECT DISTINCT post_title ,guid FROM {$wpdb->posts} where post_status='publish' and post_type='post' order by post_date DESC LIMIT ?"); if($stmt){ //パラメータをバインドします $ln = 10; $stmt->bind_param("d", $ln); //クエリを実行します $stmt->execute(); //結果変数をバインドします $stmt->bind_result($post_title, $guid); //値を読み表を作成します $returnTable = "<table style='width:500px'><th'><td style='text-align:left;'>タイトル</td></th>"; while ($stmt->fetch()) { $a = '<a href=""'. $guid .'" target="_blank">' .$post_title . '</a>'; $returnTable = $returnTable . '<tr><td>' . $a . '</td></tr>'; } //ステートメントを閉じます $stmt->close(); $returnTable .= '</table>'; } else { $error = mysqli_error($link); $errno = mysqli_errno($link); $returnTable = 'データ取得に失敗しました : ' . $error . ' | ' . $errno; } $link->close(); return $returnTable; } add_shortcode('call_GetNewPosts10_2', 'shortcode_GetNewPosts10_2');
上手く表示されていますか?
どちらでもあまり変わりなくできそうです。
この他に、$wpdb 上でも接続情報を貰っているクラスを利用した方法があります。どれが良いかは私にはまだわかりませんが、$wpdb は単純なデータ操作であれば、一番簡単なようなことが書かれていました。
やってみないと分かりませんが、基礎がわかれば単純なデータ操作であれば、どれでもなんとかなるかと思います。
以上、「mysqli の 手続き型 と オブジェクト型」の違い?説明?でした。