さくらインターネットのデータベースにさくらのWebサーバ以外からAPI経由でアクセスする方法

さくらインターネットのWebサーバー外部から直接アクセスできない

直接MySQLへの接続はブロックされています(セキュリティ対策)

解決策:API経由の接続

ローカルPC Next.jsアプリ さくらサーバー PHP API MySQL データベース ❌ 直接接続は制限されています 1. APIリクエスト 2. DB接続 3. データ取得 4. JSON応答

ローカルNext.jsからアクセスする場合

さくらインターネットの公開ディレクトにusers-api.phpを配置

<?php
header('Content-Type: application/json');

$host = 'mysql80.xxxx.sakura.ne.jp';
$dbname = 'xxxx';
$user = 'xxxx';
$pass = 'xxxx';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $stmt = $pdo->query('SELECT id, email, name FROM users');
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    echo json_encode([
        'success' => true,
        'data' => $users
    ]);

} catch(PDOException $e) {
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage()
    ]);
}
?>

Next.jsから上記APIを呼び出す

app/api/users/route.ts

import { NextResponse } from "next/server";

export async function GET() {
  try {
    const response = await fetch('https://あなたのドメイン/users-api.php');
    const data = await response.json();
    return NextResponse.json(data);
  } catch (error) {
    return NextResponse.json({ 
      error: 'ユーザー情報の取得に失敗しました' 
    }, { status: 500 });
  }
}

参考サイト