0

PDO の新機能。これが私の機能です。データベースに接続され、すべてが機能していますが、この関数が呼び出されると、実行される残りの PHP が強制終了されます。明らかに何かがおかしい。

$dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);
        global $dbh;

        /*** set the error reporting attribute ***/
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

function selectall($table){
            $stmt = $dbh->prepare("SELECT * FROM :table");
            $stmt->bindParam(':table', $table, PDO::PARAM_STR,20);
            $stmt->execute();
            $result = $stmt->fetchAll();
            return $result;
        }

次のようなページで呼び出されます。

<?php $telephones = selectall('telephone'); foreach($telephones as $telephones) { echo $telephone['title'].', '; } ?>

/// 編集 - すべてのメソッドを試しましたが、ページで呼び出されたときに関数がまだ壊れています。これがコード全体です。テスト目的でわずかに変更されています。

try { 

        $dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);

        /*** set the error reporting attribute ***/
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $sql = "SELECT * FROM system";
        foreach ($dbh->query($sql) as $row)
            {
            $url = $row['url'];
            $election = $row['election'];
            $election_date = $row['election_date'];
            $sitename = $row['sitename'];
            }


        //FUNCTION

        function selectall($table){
            global $dbh;
             $sql = "SELECT * FROM telephone";
            foreach ($dbh->query($sql) as $row){
                print $row['title'] .' - '. $row['name'] . '<br />';
            }
        }


        /** close database connections **/
        $dbh = null;

    }

    catch(PDOException $e) { 

        echo $e->getMessage(); 

    }

関数の外側のコード。テーブルシステムを反映するものは完全に機能していますが、後で関数として呼び出されたときに関数内のものは、呼び出された後にすべてを殺し、実行されていません。

4

2 に答える 2

0

$dbh未定義の変数( )をオブジェクトとして使用しようとすると、2行目で致命的なエラーが発生します。

次のようにグローバルスコープからインポートする必要があります。

global $dbh;

または、パラメータとして関数に渡します。

これを修正した後も、識別子のパラメーター(テーブル名または列名、さらには制限とオフセット)を使用できないため、コードは機能しません。残念ながら、そこでは文字列の連結に頼らなければなりません。

于 2012-07-01T14:52:37.803 に答える
0

問題は次のとおりだと思います。$telephones as $telephones

これを試して:

$telephones = selectall('telephone'); foreach($telephones as $telephone) { echo $telephone['title'].', '; }
于 2012-07-01T14:50:31.953 に答える