3


1

私は追いかけてきます。 このクラスでこの時点で達成できるのは、データベース接続だけです。 問い合わせができません。 これをうまく機能させる方法を正確に教えてください。

dbHost、$ this-> dbUser、$ this-> dbPass、$ this-> dbName);

/ *接続を確認してください* / if(mysqli_connect_errno()){printf( "接続に失敗しました:%s \ n"、mysqli_connect_error());}出口(); } else {echo 'connection made'; } / * close connection * / $ mysqli-> close(); }

パブリック関数query($ sql){$ query = $ sql; self :: preparedStatement($ query); }

パブリック関数preparedStatement(){if($ stmt = $ mysqli-> prepare($ query)){

/ *実行文* / $ stmt-> execute();

/ *バインド結果変数* / $ stmt-> bind_result($ name、$ code);

/ *値の取得* / while($ stmt-> fetch()){printf( "%s(%s)\ n"、$ name、$ code);} }

/ * closeステートメント* / $ stmt-> close(); }}

パブリック関数__destruct(){}

}

2 Answer


1


これは私のために働きました。 私は自分の変更をコメントしました。

db = new mysqli($ this-> dbHost、$ this-> dbUser、$ this-> dbPass、$ this-> dbName);

/ *接続を確認してください* / if(mysqli_connect_errno()){printf( "接続に失敗しました:%s \ n"、mysqli_connect_error());}出口(); } else {echo 'connection made'; } / * close connection * / ### $ this-> db-> close(); //ここで接続を閉じないでください。 }

パブリック関数query($ sql){$ query = $ sql; self :: preparedStatement($ query); }

パブリック関数preparedStatement($ query){### parameter $ queryを追加しました

if($ stmt = $ this-> db-> prepare($ query)){### NOT $ mysqli-> prepare()

/ *実行文* / $ stmt-> execute();

/ *バインド結果変数* / $ stmt-> bind_result($ name、$ code);

/ *値の取得* / while($ stmt-> fetch()){printf( "%s(%s)\ n"、$ name、$ code);} }

/ * closeステートメント* / $ stmt-> close(); }}

パブリック関数__destruct(){}

}

###テストコード/ * $ db = new Database(); $ dbの - > dbHost = '127.0.0.1'; $ db  - > dbUser = 'root'; $ db  - > dbPass = 'root'; $ db  - > dbName = 'テスト'; $ db  - > dbConnect(); $ db  - > query( 'SELECT * FROM test'); * /?>


0


パラメータを省略しました:

パブリック関数preparedStatement($ query)

(そしてこのメ​​ソッドは実際は静的であるべきです)

次に尋ねる前にコードをデバッグしてみてください。 単純な `echo`文でもここでできたでしょう。

*編集:*そしてそれでもうまくいかないでしょう。 変数スコープの概念を誤解していると思います。 $ mysqliはそのクラスのインスタンス変数であるべきです。ローカル変数として単に__construct()に設定しただけでは、preparedStatement()に固執しないからです。