さくらインターネットのWebサーバー外部から直接アクセスできない
直接MySQLへの接続はブロックされています(セキュリティ対策)
解決策:API経由の接続
ローカル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 });
}
}