電子書籍の厳選無料作品が豊富!

PDOのクラスライブラリを読み込むために
peclからPDOをインストールする必要があるが、インストールができない。エラーと表示される。php.iniをかなりいじり、phpinfoにもPDO,pdo_mysql,PDO_ODBC,pdo_pgsql,pdo_sqliteが表示されているのに、なぜか動かない。

■下記はコマンドプロンプト
>cd c:\ php
c:\php>pecl install pdo
downloading PDO-1.0.3.tgz ...
Starting to download PDO-1.0.3.tgz(52,613 bytes)
..............done:52,613bytes
12 source files,building
ERROR: The DSP PDO.dsp does not exist.

■動かしたいプログラムのコード(PHP辞典(山田祥寛著)から参照・引用)
<?php
require_once("C:\Program Files/Apache Group/Apache2/php_libs/Smarty/libs/Smarty.class.php");
$db=new PDO("sqlite:",dirname(__FILE__)."/sample.sqlite");
$rs=$db->query("SELECT * FROM books");
$o_smarty=new Smarty();
$o_smarty->caching=2;
$o_smarty->template_dir="./templates";
$o_smarty->compile_dir="./templates_c";
$o_smarty->cache_dir="./cache";
$o_smarty->assign("data".$rs->fetchAll(PDO::FETCH_ASSOC));
$o_smarty->display("foreach.tpl");
print ($o_Smarty->fetch("foreach.tpl"));
?>

■そして、そのコードがブラウザから表示するエラーメッセージ
Fatal error: Uncaught exception 'PDOException' with message 'safe_mode/open_basedir prohibits opening ' in C:\Program Files\Apache Group\Apache2\htdocs\dis.php:4 Stack trace: #0 C:\Program Files\Apache Group\Apache2\htdocs\dis.php(4): PDO->__construct('sqlite:', 'C:\Program File...') #1 {main} thrown in C:\Program Files\Apache Group\Apache2\htdocs\dis.php on line 4

下記のご回答をお願いします。
(1)コマンドプロンプトに表示されるエラーはどんな意味でしょうか。何がいけないとか物足りないことがありますでしょうか。
(2)そのコードのおかしいところがあったらご指摘をお願いします。
(3)コンパイルエラーメッセージを翻訳したのですが、ちょっと意味がわからないので、教えてください。

ご回答をよろしくお願いします。かなり困っています。

A 回答 (3件)

うーん・・phpinfo()でのPDO_SQLiteの項はどうなっていますか?こちらでテストしているサーバでは



PDO Driver for SQLite 3.x   enabled
PECL Module version      1.0.1 $Id: pdo_sqlite.c,v 1.10.2.6.2.2 2007/03/23 14:30:00 wez Exp $
SQLite Library          3.3.7

となっていますので(Unixサーバです)。Winサーバで試してみないと仕方ないですかねぇ。ちょっと環境作りしないといけないのですが(汗

この回答への補足

PDO Driver for SQLite 3.x
PECL Module version 1.0.1 $Id: pdo_sqlite.c,v 1.10.2.6.2.2 2007/03/23 14:30:00 wez Exp $
SQLite Library 3.3.17undefined

WindowsXP版です。うーん、同じですね。色々なサイトを見たのですが、やはりUNIXの方が分かりやすいかな。それにしてもSQLiteやらPECLやら、そういう言葉はあまり聞かないです。むしろPEARやSmartyの方が有名になるほど注目されていますし解説書が多く出回っていますし…。3日間も色々なサイトを調べてみて、近くの本屋へ何件廻ったのですが、結果はダメでした。

Shimixさん、ありがとうございました。私のために色々丁寧に対応していただいて、何のお礼を言えばいいのか分からないほど感謝しています。

補足日時:2008/02/18 19:46
    • good
    • 0

引数の「"data".$rs->fetchAll(PDO::FETCH_ASSOC)」の第一引数と第二引数の間がカンマでなくピリオドに見えますけど、大丈夫ですか(実際のソースはカンマですか?)smarty->assignの引数なのでカンマ区切りで2つあるハズですけど・・。



#そもそも文字列("data")と配列($rs->fetchAll)だし(汗

この回答への補足

ご回答ありがとうございました。素早いご回答に感謝しています。とても嬉しいです。

>引数の「"data",$rs->fetchAll(PDO::FETCH_ASSOC)」の第一引数と第二引数の間がカンマでなくピリオドに見えますけど、大丈夫ですか(実際のソースはカンマですか?)

実際のソースは確かにカンマになっています。.(ピリオド)ではなく,(カンマ)です。それでもエラーになってしまいますが、もしかして、2行目のsample.sqliteのファイルは白紙なんでしょうか。10と11行のforeach.tplは、その辞書にサンプルコードが書いてあったので、それを参考にしてコードを入れています。

補足日時:2008/02/18 09:53
    • good
    • 0
この回答へのお礼

あえて追伸します。
色々調べてみたのですが、PECLでインストールするPDOライブラリが正しくインストールされていないのが問題だと思います。コマンドプロンプトで">pecl install PDO"と入力してもERRORになる。

他のサンプルファイルでもPDOがありませんとかエラーされるようですので、恐らくPECLが問題だと思います。それにしてもPECLに関する解説サイトがあまりにもなさすぎる。

お礼内容の項目を質問の追伸に使いさせていただいております。本当にご迷惑をおかけしまして、申し訳ございません。

お礼日時:2008/02/18 10:27

phpのバージョンはいくつでしょうか?5.1以降なら、php.iniの書き替えだけで完了です。

phpinfoにも表示があるということなので、問題ないように思えますが・・。

  http://jp.php.net/manual/ja/ref.pdo.php

>$db=new PDO("sqlite:",dirname(__FILE__)."/sample.sqlite");

sqlite:とファイルパスの間にカンマがあるようですが??

  $db=new PDO('sqlite:' . dirname(__FILE__) . '/sample.sqlite');

ただ、これは例示されたソースだと3行目なんですが、エラー行が4というのはちょっと気になります。何か(改行だけの行とかを)省略されましたか?

この回答への補足

ご回答ありがとうございました。

>ただ、これは例示されたソースだと3行目なんですが、エラー行が4というのはちょっと気になります。何か(改行だけの行とかを)省略されましたか?

この件につきましては、すみませんでした。実はこのコードの仕組みを知りたいため、グローバル変数をprint出力していました。それを"教えて!goo"に投稿する際、そのグローバル変数の行だけ削除してしまい、エラーについては訂正を忘れてしまいました。

エラー行が3行目は無事に解決されましたが、今回は11行になってしまいました。問題の行は

$o_smarty->assign("data".$rs->fetchAll(PDO::FETCH_ASSOC));

です。fetchAllあたりにオブジェクトが入っていないと言っていますが、それはどういうことでしょうか?単純にSQLiteのデータが入っていないということでしょうか?

■エラー構文
C:\Program Files\Apache Group\Apache2\htdocs\dis.php
Fatal error: Call to a member function fetchAll() on a non-object in C:\Program Files\Apache Group\Apache2\htdocs\dis.php on line 11

補足日時:2008/02/18 09:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!