PDOによるSQL操作ツール SQLot*1

仕事でPHPでのDBアクセスを使うことが多くなってきたので、自宅で勉強がてら、SQL操作のできる簡単なウェブアプリを作ってたので個人的に公開します。*1

 自分のためのツールなので、簡素な造りになっています。

スクリーンショット
 起動すると、こんな感じの画面が開きます。

■実行環境
 PHPでPDOが使える環境。
 PDO経由で接続可能なDBMS(例: MySQL, sqlite)。

■インストール
 インストールは、PHPが使えるようになっているウェブサーバに splot.php というPHPスクリプトファイルを置くだけです。
 sqlot-0.0.8.php 直
 既存のウェブアプリと同じディレクトリに置いてもよいし、その隣りに別のディレクトリを作って置いてもかまいません。

■ソース
 ソースコードPHPスクリプトが1ファイルだけです。
 PDOを利用しているので、sqliteならDSNだけ、MySQLならDSNとDBユーザとDBパスワードを指定すればデータベースに接続できます。
 リクエストメソッドは、POSTにしています。*2

■使い方
 サーバ上のsqlot.phpをブラウザから指定して開きます。

 「言語」ボタン(英語版は「Language」ボタン)をクリックすると、(日本語と英語だけですが)言語選択ができます。

 使いはじめは「接続」設定が必要です。

 「接続」ボタンをクリックしてDSN(Data Source Name)(と必要ならDBユーザとDBパスワード)を指定します。
 もういちど「接続」をクリックすると接続のための入力要素は隠れます。(XAMPP Mac OS X版 1.7.3 環境で sqlite 3.4 と mySQL 5.1 については接続を試しました。)

 基本は「SQL」と書かれたテキストエリアにSQL文を記入して「実行」ボタンをクリックするだけです。
 実行結果は「実行」ボタンの下に表示します。

 「SQLotについて」をクリックすると、バージョン(とりあえず最初なので 0.0.1)とApache License 2.0ですよ(自由に使ってくださいというつもりで)という表示がポップアップします。

 こんなところです。

変更履歴

2012/08/09 0.0.8 [全488行] 初期化もれとなる処理経路があったので修正しました。
sqlot-0.0.8.php 直
2012/08/09 0.0.7 [全487行] 横に長いSQL実行結果を表示したときにSQLテキストエリアと「実行」ボタンが中央にあるとウインドウからはみだして横スクロールが必要だったので、左端に寄せて横スクロールを不要にしました。
sqlot-0.0.7.php 直
2012/07/25 0.0.6 [全485行] アップロードファイルの指定があるかの判定処理を修正。アップロードファイルが大きすぎた場合にSQLテキストエリアに出力する結果を空にするよう変更。実行時の結果の初期化もれを修正。sqlotスクリプトが直接呼ばれたのでない場合(他のスクリプトからrequireされた場合)には画面表示のHTMLを出力しないように修正。
sqlot-0.0.6.php 直
2012/06/16 0.0.5 [全475行] SQL文のファイルからの読み込みに対応(ファイルを指定してSQL実行ボタンをクリックするとファイル内容をSQL文のテキストエリアに読み込む。読み込み後にSQLの実行ボタンをクリックするとそのSQL文を実行する)。クラス間にまたがる共通関数のためのSQLotUtilクラスを追加して5クラス構成に変更。未使用の$_SESSIONグローバルを受け付ける引数を削除するようにいくつかの関数シグネチャを変更。SELECT文の他にも複数行の結果を返すDBMS固有の拡張構文に対応してfetchAll()を呼ぶかどうかの判定を修正。
sqlot-0.0.5.php 直
2012/06/16 0.0.4 [全350行] SQLotクラスしかなかったクラス構成を機能別(SQLotSpecs,SQLot,SQLotTextBundle,SQLotHTMLViewの4クラス)に分割。SQLエラーの際のSQL文表示テーブルの列名が日本語のみだったのを言語指定に従うように修正。
sqlot-0.0.4.php 直
2012/06/16 0.0.3 [全312行] リクエストメソッドをPOSTに戻す。MySQLでエラーになるためSELECT文実行時のみ$pdo->fetchAll()を呼ぶように修正。SQL文を実行前に正規化してコメント除去・空白類を縮約。実行結果のSQL文表示で改行コードを黒い(小さな)空白文字として明示。SQL実行エラー時に当該SQL文を表示。「更新行数(Count of Update)」を「実行行数(Count of Executed)」に訂正。
sqlot-0.0.3.php 直
2012/06/11 0.0.2 [全268行] リクエストメソッドをGETに変更。DSN指定にDBユーザとDBパスワードの入力欄を追加。言語切替機能(日本語・英語のみ)を追加。入力文字列の表示前のサニタイズ処理を追加。NULL値の表示方法が誤っていたので訂正
sqlot-0.0.2.php 直
2012/06/09 0.0.1 [全194行] 最初のバージョン。
sqlot.php 直

*1:CSE(Common SQL Environment)とかphpMyAdminとかTkSqliteとか、いろんな機能があって便利なプログラムもいろいろありますが、プログラムをインストールしようとするとなると、いろいろと規則や手続きの問題があって自由に使わせてもらえない場合があります。また、ODBCドライバもないとダメとか、sqliteの場合には対応していなかったりもします。端末コンソールでの作業をさせてもらえないようなこともあります。そういうもろもろを気にしなくても、基本的なSQL文を実行してみるくらいのことができるだけでもうれしいこともままあるので、あえて自作してみたものです。

*2:version 0.0.3 から。それまではPOSTではなく、GETにしていました。GETにしていた理由は、DBパスワードなんかも入力した内容が丸見えになりますが、ブラウザのURLをまるごとコピーすれば別のタブやウインドウに同じSQL実行画面をコピーできる利便性を優先したかったからでした。GETだとリクエストURLのサイズ制限のために十分大きなSQL文が送信できないことが判ったので、version 0.0.3 でPOSTに戻しました。