質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.92%

PHP Mysql

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,675

score 74

下記のようなエラー出てしまって解決できません、誰かが教えていただけません? Mysqlのバージョンの問題のようには思いましたが解決できませんでした。

1)Strict Standards: Non-static method MyAdodbControl::getAdodbInstance() should not be called statically in /app/webtest.php on line 10

ソースコードはこれです。

$adodb = &MyAdodbControl::getAdodbInstance(); 
        if (PEAR::isError($adodb)) {
        input_error($adodb->getMessage());
    }

2)Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /includes/adodb/drivers/adodb-mysql.inc.php on line 348

Warning: mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /includes/adodb/drivers/adodb-mysql.inc.php on line 348

ソースコードはこちらです。

function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
    {
        if (!empty($this->port)) $argHostname .= ":".$this->port;

        if (ADODB_PHPVER >= 0x4300)
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
                        $this->forceNewConnect,$this->clientFlags); 
        else if (ADODB_PHPVER >= 0x4200)
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
                                            $this->forceNewConnect);
        else
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword);

        if ($this->_connectionID === false) return false;
        if ($argDatabasename) return $this->SelectDB($argDatabasename);
        return true;    
    }

3)Fatal error: Call to undefined method PEAR::raise_error() in /lib/MyAdodbControl.class.php on line 30 ソースコードはここです。

function &getAdodbInstance()
        {
            static $singleton;
            if ($singleton == null) {
                require_once(ADODB_DIR. 'adodb.inc.php');
                $ADODB_CACHE_DIR = ADODB_CACHE_DIR;
                $singleton = &ADONewConnection(ADODB_DSN);
                if (!$singleton) {
                     return PEAR::raise_error(''); 
               }
                $singleton->SetFetchMode(ADODB_FETCH_ASSOC);
            }
            return $singleton;
        }
    }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2015/12/09 20:56

    ソースコードは見やすくしてください。

    キャンセル

  • hyskyo

    2015/12/09 21:10

    失礼いたしました。見やすく修正しました。
    宜しくお願いします。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2016/08/30 08:40

    タイトルは簡潔に分かりやすく

    キャンセル

回答 3

+2

 1. Non-static method エラー

1)Strict Standards: Non-static method MyAdodbControl::getAdodbInstance() should not be called statically in /app/webtest.php on line 10

オブジェクト化して利用する関数を static 関数として呼び出していることが原因になります。
MyAdodbControl をオブジェクト化して、getAnodbInstance 関数を呼び出してください。

$ctl = new MyAdodbControl(/* 何らかの引数 */);
$adodb = $ctl->getAdodbInstance();

もしくは、getAnodbInstance 関数の宣言部に static で呼び出せるように "static" キーワードを設定してみてください。

// MyAdodbControl クラス
public static function getAnodbInstance() {
}

 2. Deprecated: mysql_connect():

接続先のMySQLサーバーは起動していらっしゃいますか?
また、/tmp/mysql.sock は存在していますか? 


 3. PEAR::raise_error

内容のとおり、raise_error 関数が存在していないということですね。
'PEAR.php' はちゃんと読み込まれているのでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/12/10 11:35

    usk さん
    ありがとうございます。

    実はssh rootで接続できなくて、FTPで接続してファイルを修正していまして、MYsqlは起動はしているみたいです。
    2)と3)を修正できましたが1)についてですが指示通りpublic static function getAnodbInstance() {で試してみましたがダメでした。


    キャンセル

  • 2015/12/10 18:58 編集

    いろいろやってみまして以下のエラーでよくわらなくなりました。
    syntax errorのようなところも見当たらないですが

    Parse error: syntax error, unexpected '$adodb' (T_VARIABLE), expecting

    ```
    static function $adodb = &MyAdodbControl::getAdodbInstance(){

    if (PEAR::isError($adodb)) {
    input_error($adodb->getMessage());
    }
    }
    ```

    キャンセル

  • 2015/12/11 08:35 編集

    > Parse error: syntax error, unexpected '$adodb' (T_VARIABLE), expecting

    static function $adodb = &MyAdodbControl::getAdodbInstance(){

    ここの部分がおかしいですね。
    function の定義と、変数代入を同時に行うことができません。
    またプロパティに設定する初期値は、変数は設定できないと思います。

    $adodb に &MyadodbControl::getAdodbInstance() で取得した値を追加したいなら、コンストラクタで処理してみてはいかがでしょうか。
    (前後の処理内容が分からないので、コンストラクタで処理することができるかどうかも分かりませんが・・・)

    たぶん $adodb 代入処理は下記でよいのでは?

    $adodb = &MyAdodbControl::getAdodbInstance();

    キャンセル

checkベストアンサー

+1

1)に関してですが、インスタンスを作成しないで、そのオブジェクトのメソッドを呼び出しているために、エラーとなっているようです。
以下のように、呼び先のメソッドをstaticで宣言してはいかがでしょうか?

public static function &getAdodbInstance()
        {
            static $singleton;
            if ($singleton == null) {
                require_once(ADODB_DIR. 'adodb.inc.php');
                $ADODB_CACHE_DIR = ADODB_CACHE_DIR;
                $singleton = &ADONewConnection(ADODB_DSN);
                if (!$singleton) {
                     return PEAR::raise_error(''); 
               }
                $singleton->SetFetchMode(ADODB_FETCH_ASSOC);
            }
            return $singleton;
        }
    }

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/12/10 11:38

    KatsumiTanaka さん

    ありがとうございます。
    試したところエラーは無くなりました。

    キャンセル

+1

348行目は「mysql_connectの関数がPHP5.5で非推奨となり、PHP7.0で削除されているため、PDOかmysqliを使いなさい」というメッセージです。

いまどきPEARなんて使いません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る