本記事では、PDOドライバーを使用してOceanBaseデータベースに接続し、テーブルの作成やデータの挿入などの基本的な操作を実行する方法について説明します。 PDOは、PHP Data Objectsの略であり、PHPアプリケーションにおいて軽量で一貫性のあるデータアクセス抽象化レイヤーを提供するインターフェースです。
適用バージョン
OceanBaseデータベースのすべてのバージョン。
前提条件
- PHPとphp-mysqlがインストール済みであること。
- OceanBaseデータベースをインストール済みで、MySQLテナントが作成されていること。
手順
- phpとphp-mysql環境を確認し、インストールします。
podtest.phpのサンプルファイルを新規作成し、データベース接続情報を設定します。podtest.phpファイルを実行して検証します。
ステップ1:PHPとphp-mysql環境を確認し、インストールする
PHPとphp-mysql環境をインストールします。具体的な操作については、ExtドライバーでOceanBaseデータベースに接続するのステップ1:PHPとphp-mysql環境を確認し、インストールするを参照してください。
ステップ2:podtest.phpファイル内のデータベース接続情報を修正する
Linux環境を例にすると、vi podtest.phpまたはvim podtest.phpコマンドを使用してpodtest.phpファイルを編集し、ファイル内のデータベース接続情報を実際の状況に合わせて修正します。
[root]# vim podtest.php
<?php
$servername = "172.30.xx.xxx";
$port = "2881";
$username = "root@mysql";
$password = "xxxxxxx";
$dbname = "test";
// 接続の作成
try {
$conn = new PDO("mysql:host=$servername;port=$port;dbname=$dbname", $username, $password);
// PDOエラーモードを例外に設定
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "接続成功";
} catch(PDOException $e) {
echo "接続失敗: " . $e->getMessage();
}
?>
ここで:
$servernameはMySQLサーバーのアドレスを指します。$portはMySQLサーバーのポート番号を指します。$usernameはMySQLユーザー名を指します。$passwordはMySQL接続用のパスワードを指します。$dbnameは接続するデータベースの名前を指します。
ステップ3:podtest.phpファイルを実行して検証する
podtest.php ファイルに意図的に誤ったデータベース名を入力し、php podtest.php コマンドを実行すると、次のようなエラーメッセージが返されます:
[root]# php podtest.php
接続失敗: SQLSTATE[42000] [1049] Unknown database 'test123'
正しい情報を入力すると、接続成功のメッセージが表示されます:
[root]# php podtest.php
接続成功
テーブル作成および追加・削除・更新・クエリ操作のテスト例は以下のとおりです:
[root]# vim podtest.php
<?php
$servername = "172.30.xxx.xxx"; // MySQLサーバーアドレス
$port = "2881"; // MySQLサーバーのポート番号
$username = "root@mysql"; // MySQLユーザー名
$password = ""; // MySQLパスワード
$dbname = "test"; // 接続するデータベース名
// 接続の作成
try {
$conn = new PDO("mysql:host=$servername;port=$port;dbname=$dbname", $username, $password);
// PDOのエラーモードを例外に設定
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "接続成功";
} catch(PDOException $e) {
echo "接続失敗: " . $e->getMessage();
}
// テーブルの作成
try {
$sql = "CREATE TABLE myguests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
$conn->exec($sql);
echo "テーブルmyguestsの作成に成功しました";
} catch(PDOException $e) {
echo "テーブルの作成に失敗しました: " . $e->getMessage();
}
// データの挿入
try {
$sql = "INSERT INTO myguests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
$conn->exec($sql);
echo "新規レコードの挿入に成功しました";
} catch(PDOException $e) {
echo "データの挿入に失敗しました: " . $e->getMessage();
}
// テーブルのクエリ
try{
$sql = "SELECT id, firstname, lastname FROM myguests";
$stmt = $conn->prepare($sql);
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
if ($stmt->rowCount() > 0) {
// データの出力
while($row = $stmt->fetch()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "結果は0件です";
}
} catch(PDOException $e) {
echo "テーブルのクエリに失敗しました: " . $e->getMessage();
}
// テーブルの削除
try {
$sql = "DROP TABLE myguests";
$conn->exec($sql);
echo "テーブルmyguestsの削除に成功しました";
} catch(PDOException $e) {
echo "テーブルの削除に失敗しました: " . $e->getMessage();
}
// 接続を閉じる
$conn = null;
?>
実行が成功すると、次のような例が返されます:
[root]# php podtest.php
接続成功テーブルmyguestsの作成に成功しました新規レコードの挿入に成功しましたid: 1 - Name: John Doe<br>テーブルmyguestsの削除に成功しました