PR

ロリポップサーバー上のDBにアクセスする方法

スポンサーリンク

ロリポップサーバーではDB(MySQL)を利用できます。

そのDBにアクセスする方法が公式サイトの情報では分かりにくかったので、整理します。

本記事でわかること
  • ロリポップサーバーのDBにアクセスする方法
  • ロリポップサーバーで、できないこと
  • エラー対応
スポンサーリンク

ロリポップサーバーのDBにアクセスする方法

前提

ロリポップサーバーのDBは、レンタルサーバー内からしかアクセスできないです。

そのため、ロリポップサーバーで利用可能なCGIを経由してアクセスする必要があります。

ローカルでTypeScriptコードを実行→PythonのCGIをロリポップサーバーで実行→MySQLのデータベースに接続

という流れで接続します。

ローカルで実行するコードは任意の言語で大丈夫です。CGIもPHPやPerlなど他にも対応言語がありますのでお好みの言語をご利用ください。

アクセス手順

DB作成

ロリポップのページにアクセスし、「データベース」の「作成」からDBを作ってください。

作成したDBの、上記の情報は後で利用します。

phpMyAdminからDBに接続して、適当な名前でテーブルを作成し、行を足しておいてください。

CGI配置

まず、CGIの使い方を把握しておいてください。

以下の記事でHelloworld!までの手順を紹介しています。

同様の手順で、以下のPythonで書かれたCGIのコードをFTPでレンタルサーバー上にアップロードしてください。

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

import cgi
import mysql.connector

print("Content-Type: text/html; charset=utf-8\n")

try:
    conn = mysql.connector.connect(
        host='mysqlxxx.phy.lolipop.lan',
        user='LAAxxx',
        password='xxxxx',
        database='LAAxxx-xxx',
        charset='utf8mb4'
    )
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM your_table")
    rows = cursor.fetchall()
    for row in rows:
        print(f"{row}<br>")
except mysql.connector.Error as err:
    print(f"エラー: {err}")
finally:
    if conn.is_connected():
        cursor.close()
        conn.close()

ロリポップのデータベース情報を参考に、以下のようにコードを書き換えてください。

hostはサーバー、userはユーザー名、passwordはユーザー名の行にある「パスワード確認」の中身、databaseはデータベース名を入力して下さい。

your_tableは、DBに作成したテーブル名に変更してください。適宜SQLもいじって遊んでみてください。

セキュリティ上の欠陥だらけのコードです。あくまでデモとしてご利用ください。
デモ終了後は速やかに削除してください。

CGIをFTPを用いてサーバーに配置できたら、ファイルのURLをメモしておいてください。

ローカル実行用のTypeScriptコード

このCGIにローカルからアクセスする、TypeScriptで書かれたコードが以下になります。

// fetch-cgi.ts

const fetchCgi_demo = async () => {
  try {
    const response = await fetch('http://xxx/xxxx/xx.py');

    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }

    const text = await response.text();
    console.log('CGIスクリプトの出力:');
    console.log(text);
  } catch (error) {
    console.error('エラーが発生しました:', error);
  }
};

fetchCgi_demo();

このコードを実行すると、DBの中身が参照できます。

http://xxx/xxxx/xx.pyは、CGIファイルのURLを指定してください。

実行は、以下のコマンドなどで可能です。

npx ts-node xxx.ts
スポンサーリンク

ロリポップサーバーで、できないこと

SSHポートフォワーディングを利用してDBアクセスすること

禁止されているみたいです。ローカルからCGIを経由せずにDB接続できると嬉しかったのですが。。。

かなりいけてないですね。

pipやnpmの利用

これらが利用できないため、自由度が非常に低いです。

スポンサーリンク

エラー対応

CGI実行で500エラーが出た場合

以下を参考にしてください。改行コードをLF(ラインフィード)に統一することで解消できます。

設置したCGIファイルが500エラーになってしまう!そのエラー、改行コードが原因かも!?
CGIファイルをせっかく設置したのに、いざブラウザでアクセスしてみると500エラーになってしまう。そんな場合はこの記事で紹介しているような理由が原因かもしれません。原因と解決方法をご案内します。

コメント