-2

私はデータベースから情報を選択するための手続き型PHP関数の作成に精通していますが、オブジェクト指向の準備されたSQLステートメントの使用に切り替えると、私の関数は機能しなくなります。手続き型PHPを実行しているので、まだOOPを理解しておらず、学習しようとしているので、これが私の問題です。

これは期待どおりに機能します。

if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) {
    $stmt->bind_param("s", $city);
    $city = 'la';
    $stmt->execute();
    $stmt->bind_result($state);
    $stmt->fetch();
    $stmt->close();
    echo $state;
}

しかし、これはしません:

function get_state( $city ) {
if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) {
        $stmt->bind_param("s", $city);
        $stmt->execute();
        $stmt->bind_result($state);
        $stmt->fetch();
        $stmt->close();
        echo $state;
    }
}

get_state('la');

どちらの例でもデータベースmysqli接続が必要ですが、何らかの理由で関数バージョンが機能しません。何が間違っているのでしょうか。

4

4 に答える 4

1

変数$mysqliは関数のスコープ外です。引数として関数に渡したくない場合は、グローバルとして宣言する必要があります。

function get_state( $city ) {
    global $mysqli;

    if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) {
        $stmt->bind_param("s", $city);
        $stmt->execute();
        $stmt->bind_result($state);
        $stmt->fetch();
        $stmt->close();
        echo $state;
    }
}

get_state('la');

関数の外部で使用可能な変数は、グローバルとして宣言されているか、関数の引数として渡されない限り、ユーザー定義関数でアクセスできません。

于 2012-12-20T07:40:09.523 に答える
0

最初にすべきことは、エラー報告を有効にすることです。$ mysqliは関数スコープに存在しないためprepare、オブジェクト()ではないものに対してメソッド()を呼び出していることがわかります。mysqli$ mysqliを関数に渡すか、関数がその変数にアクセスする方法について他のメカニズムを考案する必要があります。

于 2012-12-20T07:13:44.907 に答える
0

$mysqli定義されていないと思います。スコープのマニュアルを参照してください

于 2012-12-20T07:15:13.643 に答える
0

$mysqliinパラメータを渡し、接続mysqliオブジェクトをクエリに渡します。

于 2012-12-20T07:16:29.170 に答える