📘

WordPress|データベースに接続して情報を取得する

2022/08/26に公開

▼ NOTE ▼

決められたデータを取得するとき

$dsn = 'mysql:dbname={データベース名};host={ホスト名}';
$user = 'データベースのユーザー名';
$password = 'データベースのパスワード';

try{
  $dbh = new PDO($dsn, $user, $password);
  $stmt = $dbh->query(
	'SELECT *
	FROM wp_posts
	WHERE post_status = "publish"
	AND post_type = "post"
	ORDER BY post_date DESC
	LIMIT 12'
  );
  $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
	echo('Error:'.$e->getMessage());
	die();
};

$dbh = null;

foreach ($data => $value) {
  var_dump($value);
};

SQL文に代入して検索するとき

パターン①

// variables
$id = $post->ID;
$meta_key = 'title';

// query
$query = $wpdb->prepare( 
  "
  SELECT meta_value
  FROM wp_postmeta
  WHERE post_id = %d AND meta_key = %s
  ", 
  $id,
  '%' . $meta_key . '%'
);
$results = $wpdb->get_results( $query );
$results = $results->fetchAll(PDO::FETCH_ASSOC);

▼ プレスホルダー ▼

  • %s //文字列
  • %d //整数
  • %f //浮動小数点

パターン②

variables
$id = esc_sql($post->ID);

// query
$dbh = new PDO($dsn, $user, $password);
$query = $dbh->query(
  "SELECT meta_value
  FROM wp_postmeta
  WHERE post_id = {$id}"
);
$results = $query->fetchAll(PDO::FETCH_ASSOC);

▼ DB接続時のエラー ▼

□ ユーザー名が異なる時
SQLSTATE[28000] [1045] Access denied for user '〇〇〇〇'@'localhost' (using password: YES)
□ ホスト名が異なる時
SQLSTATE[HY000] [2005] Unknown MySQL server host '〇〇〇〇' (11001)
□ MySQLのサーバが停止している時
SQLSTATE[HY000] [2003] Can't connect to MySQL server on '〇〇〇〇' (10061)

▼ Reference ▼

Discussion

ログインするとコメントできます