WordPress mysqli の 手続き型 と オブジェクト型

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 Javascriptでバーコード入力処理
WordPress で Javascript を使ってみる
WordPress mysqli の 手続き型 と オブジェクト型
WordPress PHP で文字列を表示する
WordPress MySQLと接続
WordPress の functions.phpについて
WordPress 始めてのPHPコード実行
PHPを始める前に
MySQL データ保存(データバックアップ)
SyntaxHighlighter Evolved

上手く表示されていますか?
ちょっと複雑になってしまいましたが、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');
タイトル
WordPress Javascriptでバーコード入力処理
WordPress で Javascript を使ってみる
WordPress mysqli の 手続き型 と オブジェクト型
WordPress PHP で文字列を表示する
WordPress MySQLと接続
WordPress の functions.phpについて
WordPress 始めてのPHPコード実行
PHPを始める前に
MySQL データ保存(データバックアップ)
SyntaxHighlighter Evolved

上手く表示されていますか?
どちらでもあまり変わりなくできそうです。
この他に、$wpdb 上でも接続情報を貰っているクラスを利用した方法があります。どれが良いかは私にはまだわかりませんが、$wpdb は単純なデータ操作であれば、一番簡単なようなことが書かれていました。
やってみないと分かりませんが、基礎がわかれば単純なデータ操作であれば、どれでもなんとかなるかと思います。

以上、「mysqli の 手続き型 と オブジェクト型」の違い?説明?でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください