• 締切済み

PHPでのsqlite_close();について。

PHPでSQLiteを使って色々作ったりしている者ですが、sqlite_close();について質問があります。 例えば、 $db = sqlite_open("test.db"); と仮定して接続した時に、 sqlite_close($db); と明示的に切断(リソースの破棄)する必要があるのでしょうか?また、省略しても問題ないのでしょうか。 私の探し方が下手なのか、sqliteのマニュアルサイトばかりで希望の答えが見つかりませんでした。 どなたかご教授いただけませんか。 よろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数3

みんなの回答

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

sqliteはよく知らないのですが、持続的データベース接続でなければ大丈夫かと。 mysql_close http://jp.php.net/manual/ja/function.mysql-close.php リソースの開放 http://jp.php.net/manual/ja/language.types.resource.php#language.types.resource.self-destruct

outradio
質問者

お礼

返事が大変遅れてしまって申し訳ありません。 アドバイスありがとうございます。 やはり、持続的に接続していなければ省略してもPHP実行終了時にリソースが破棄されるのですね。SQLiteは資料がまだまだ乏しく、これから発展していくといいなぁと思っています。 これからもどうぞよろしくお願い致します。

関連するQ&A

  • (PHP 4.4.8) sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。

    PHP 4.4.8 SQLite Library 2.8.14 の環境で、 sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。 (例)create_db.php <?php $db = sqlite_open("../db_test"); //←ここでエラーが出ます。 $query = "CREATE TABLE tbl_test(id,aaa,bbb)"; $result = sqlite_query($db,$query); sqlite_close($db); ?> ネットで調べた所、sqlite_open()は引数に「相対パス(or絶対パス)」を入れることは可能であり、 かつ、「../db_test」が無い場合、作られる仕組みということです。 エラー表示: Warning: sqlite_open() [function.sqlite-open]: unable to open database (...以下略) ちなみに、上記のコードにおいて、 「../db_test」ではなく、「db_test」として同じことをすると、上手くいきます。 つまり、スクリプトファイル(create_db.php)と同階層にファイルを作成することはできるのです。 $db = sqlite_open("db_test");   //← ○:ファイル作成成功 $db = sqlite_open("../db_test"); //← ×:ファイル作成失敗 どなたかご助言をよろしくお願い致します。

    • ベストアンサー
    • PHP
  • SQLiteについて

    SQLiteのサンプルに、以下のような記述がありましたが extends(派生クラス) ということは元の基本クラスの記述があるということなのでしょうか? https://www.php.net/manual/ja/sqlite3.open.php /** * SQLite3 クラスを継承して __construct を変更し、 * open メソッドで DB を初期化します */ class MyDB extends SQLite3 {

    • ベストアンサー
    • MySQL
  • SQLITEの構築について

    現在、レンタルサーバーでSQLITEを使おうと思い、 <html> <head><title>PHP TEST</title></head> <body> <?php $link = sqlite_open('test.db', 0666, $sqliteerror); if (!$link) { die('接続失敗です。'.$sqliteerror); } print('接続に成功しました。<br>'); // SQLiteに対する処理 sqlite_close($link); print('切断しました。<br>'); ?> </body> </html> と、スクリプトを組んだのですが、ブラウザでアクセスすると Call to undefined function sqlite_open()という、エラーが出てしまいます。これがsqlite_open()関数が定義されていないという意味はわかるのですが、何故このエラーが表示されるのか理解できません。 レンタルサーバーではSQLITEが使えるとかかれており、またphpのバージョンも5.1.6と、SQLITEが標準でバンドルされているはずなんですが、何もしようともcall to undefined ~~  というエラーが出てしまいます。 レンタルサーバー内でこのエラーを出さず、sqliteを使えるようにするにはどうしたらよいでしょうか?ご教授お願いします。 また、余談かもしれませんが、自分なりに、検索し、調べた結果、php.iniというファイルを作成し display_errors = On extension=php_pdo_sqlite.dll extension=php_pdo.dll extension=php_sqlite.dll と、書き込んだファイルをサーバーにあげたのですが、無意味でした。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • SQLiteってcloseする必要あるんですか?

    1.タイトルの通りなんですが、closeする必要ってあるんでしょうか? 2.PHP+SQLiteでWEBページを作成しているんですが、 SQL文を発行するたびにopenしていますが、最初にOPENしてしまえば 各SQL文発行時にopenする必要って無いのでしょうか? 3.closeを入れると、下記のようなエラーが・・・原因が分かりません・・・orz 「Warning: sqlite_close() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\php\dev\wedding\add.php on line 51」 有識者の方がおられたら、ご教授お願いいたしますm(__)m

  • sqlite_open()なんですが

    PHPで <?php $db=sqlite_open("rensyuu.sqlite",0666,$err); $row=sqlite_query($db,"select count(*) from sqlite_master where name='tb1';"); $kotae=sqlite_fetch_single($row); print($kotae); sqlite_close($db); ?> と打ったものを実行したら、 Warning: sqlite_open() [function.sqlite-open]: file is encrypted or is not a database in.... というエラーになりました。 どうもsqlite3で作ったのが原因っぽいんですがなにか ご存知でしたら教えていただけませんか。

  • phpからsqlite3にアクセスできない

    windows7-64bit IIS7でphp(5.6.30)+sqlite3で動かしていますが、 php.iniには extension=php_pdo_sqlite.dll extension=php_sqlite3.dll を記述し、 phpinfoには PDO support : PDO drivers PDO Driver for SQLite 3.x : SQLite Library とextに反映されてそうです。 しかしphpからDBにアクセスしようとすると、定義されていませんとエラーになります。 [undefined function sqlite_open()] sqlite_open( sqlite_popen( new SQLite3( のどれもエラーとなります。 どのようにしたら接続できるのでしょうか?

    • ベストアンサー
    • PHP
  • sqlite_open、SQLite3::open

    「sqlite_open」「SQLite3::open」の違いを教えてください。 ▽http://www.php.net/manual/ja/function.sqlite-open.php ▽http://www.php.net/manual/ja/sqlite3.open.php ・サーバ移行したら、それまで「sqlite_open」で動作していたのが「SQLite3::open」でないと動作しないようになりました ・何の影響を受けているのでしょうか? ・PHPバージョン? ・SQLiteバージョン? ・それとも単に書き方の問題? ■PHPバージョン ・移行前5.2.5 ・移行後5.3.3 ■SQLiteバージョン ・多分3と思うけど、どうやって確認?

    • ベストアンサー
    • PHP
  • 単純ですが、意外と穴?なデータベースリソースの鮮度

    よろしくお願い致します。 環境PHP5.2.5 / SQLite3 /*---------------------------------------- * インサート -----------------------------------------*/ $sql_1 = 'INSERTなんたら~(id = 25 を作成)'; $db_pass = 'db_hoge.sqlite'; $db_res = sqlite_open($db_pass); //★タイム(1) $result = sqlite_query($db_res,$sql_1);      :   ~ INSERT処理($sql_1)をしてます ~      : //sqlite_close($db_res) ここではクローズせず      :      : /*---------------------------------------- * デリート -----------------------------------------*/ $sql_2 = 'DELETEなんたら~(id = 25 を削除)'; //省略しちゃうわけです。$db_pass = 'db_hoge.sqlite'; //省略しちゃうわけです。$db_res = sqlite_open($db_pass); //★タイム(2) $result = sqlite_query($db_res,$sql_2);      :   ~ DELETE処理($sql_2)をしてます ~      : /*---------------------------------------- * /処理完了 -----------------------------------------*/ //ここで、ようやく、クローズ sqlite_close($db_res); //============================================== 何が疑問かと言いますと、 ★タイム(1)と、★タイム(2)の時点では、 $db_res の中身の鮮度が違うのでは?と思うわけです。 つまり、 ★タイム(1)の時点では、id=25のデータは作成されていません。 ★タイム(2)の時点では、id=25のデータは作成済みです。 id=25が作成されていない状態のDBリソースを、 ★タイム(2)の所で、使用しています。 言い換えると、 id=25が存在していないDBのリソースを、 タイム(2)の時点で使用し、 そのリソースをもとに、 id=25のデータを消そう(DELETEしよう)としているわけです。 「//省略しちゃうわけです。」 という所で、省略する場合と、しない場合とでは、 結果はやはり異なるのでしょうか? 検査対象がリソースだけに、調べにくいなと思い、 質問させて頂きました。 どなたか、この辺りの正式な作法も含めて、 教えて頂けてませんでしょうか。 上記の「//省略しちゃうんです。」の方法で、 問題ないですよ、 ということであれば、今後も、省略しちゃう方向で、 コーディングしていこうと思います。笑

    • ベストアンサー
    • PHP
  • PHP5からSQLite3の接続

    いつもお世話になります。 現在PHPを勉強しているのですが、 PHP5からSQLite3へ接続するさいに以下のメッセージが表示されます。 Warning: sqlite_open() [function.sqlite-open]: file is encrypted or is not a database in [PHPのファイルパス].php on line 32 SQLiteのテストデータベースに接続が上手くいきません 32行目↓ $dbHandle = sqlite_open('C:/pg/Apache/Apache2.2/htdocs/testdb', 0666, $err); [環境] WindowxXP PHP Version 5.3.5 SQLite3 php_pdo.dll が../php/extフォルダーに無いのでphp.iniのコメントは外してません。 ;を外したらアパッチ起動時に「モジュールがない」と言われ起動しません。 初心者で色々調べたのですが・・・ すみませんがどなたかご教示お願い致します。

    • ベストアンサー
    • PHP
  • HP上からのPHPによるSQLiteの読み込み

    表題のとおり、PHPでsqliteのDBにアクセスして、表示しようと考えています。 サーバーに以下の内容を書いた、result.phpというファイルを置いて、ページを開きました。 <html> <body> <h3>テスト</h3> <?php try{ $db = new SQLite3('sqlit.db'); $result = sqlite_query($db, "SELECT * FROM table"); $db->close(); } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "<br/>"; } ?> </body> </html> すると、以下のエラーが出ました。 Warning: sqlite_query() expects parameter 1 to be resource, object given in /home/(ファイル置いてある場所)/result.php on line 7 sqlit.dbは適当に作ったファイルで中身はどうでもいいのですが、 エラー内容で検索したところ、一つ目の引数のdb形が違うよーみたいな意味のようですが、解決策がわかりません。 ためしにsqlit.dbを適当な名前にしたところ、その適当な名前のファイルの名前は出てきましたが、 エラー内容は同じでした。 つまり、new SQLite3は実行できている=PHPでSQLのファイルの作成、読み込みは出来ている。 しかし、テーブル名が違うとかといった内容ではなく、型が違う、といわれ困っています。 同じ階層に置いた「php.ini」に以下の3行を記載し、配置してあります。 extension=php_pdo_sqlite.dll extension=php_sqlite.dll extension=php_pdo.dll しばらく調べたのですが、phpそのものが実行されないとか、dbファイルがないといった状況なら調べられそうではあるのですが、実行は出来たけど読み込もうとするとエラーになる。 といわれ調べても情報が出てこず困っています。 何かエラーの可能性になる部分や、調べ方がありましたら教えてください。 ちなみにファイルを置いてあるのはさくらインターネットのサーバーでして、 PHPの設定は「PHP 5.3.8 (CGI版) 」にしてあります。

    • 締切済み
    • PHP

専門家に質問してみよう