本記事では、PDOドライバを使用してOceanBase Cloudに接続し、テーブルの作成やデータの挿入などの基本操作を行う方法について説明します。 PDO(PHP Data Objects)は、PHPアプリケーションでデータアクセスの抽象化レイヤーを提供するための、軽量で一貫性のあるインターフェースです。
対象バージョン
OceanBase Cloudのすべてのバージョン。
前提条件
- phpおよびphp-mysqlがインストールされていること。
- OceanBase Cloudのアカウントを登録し、クラスタインスタンスとMySQL互換モードのテナントを作成していること。詳細は、クラスタインスタンスの作成およびテナントの作成をご参照ください。
操作手順
- phpおよびphp-mysql環境を確認し、インストールします。
- サンプルファイル
podtest.phpを新規作成し、データベース接続情報を設定します。 podtest.phpファイルを実行して検証します。
操作手順1:phpおよびphp-mysql環境の確認とインストール
PHPおよびphp-mysql環境のインストールについては、Extドライバーを使用したOceanBase Cloudへの接続の手順1:phpおよびphp-mysql環境の確認とインストールをご参照ください。
操作手順2:podtest.phpファイル内のデータベース接続情報の変更
Linux環境を例にすると、vi podtest.php または vim podtest.php コマンドを使用して podtest.php ファイルを編集し、実際の環境に合わせてファイル内のデータベース接続情報を変更します。
[root]# vim podtest.php
<?php
$servername = "t********.********.oceanbase.cloud";
$port = "3306";
$username = "mysql001";
$password = "********";
$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:OceanBase Cloudの接続アドレスです。$port:OceanBase Cloudの接続ポートです。デフォルトは3306です。$username:データベースにアクセスするアカウントです。$password:アカウントのパスワードです。$dbname:データベース名です。
操作手順3:podtest.phpファイルの実行と検証
podtest.php ファイルに意図的に誤ったデータベース名を入力し、php podtest.php コマンドを実行すると、以下のエラーメッセージが返されます。
[root]# php podtest.php
连接失败: SQLSTATE[42000] [1049] Unknown database 'test123'
正しい情報を入力すると、接続成功のメッセージが表示されます。
[root]# php podtest.php
连接成功
テーブルの作成およびCRUD操作のテスト例は以下のとおりです。
[root]# vim podtest.php
<?php
$servername = "t********.********.oceanbase.cloud"; // サーバーアドレス
$port = "3306";
$username = "mysql001"; // ユーザー名
$password = "********"; // パスワード
$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 删除成功