本文では、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の削除に成功しました