2017-12-03 16 views
-2

は私の代わりに私の現在のコードのプリペアドステートメントを使用したい:プリペアドステートメントを使用して結果を取得し、whileループで使用するにはどうすればよいですか?

if(isset($_POST['submit']) && $_POST['checkGame'] != 'Any') 
    { 
     $game = $_POST['checkGame']; 
     $sql="SELECT ipaddress, port FROM servers WHERE game=('$game')"; 
      $result=mysqli_query($con,$sql); 
      while ($row=mysqli_fetch_array($result)) { 
      array_push($serverConnectionArray, ["address" =>$row['ipaddress'], "port" =>$row['port']]); 
    } 
    } 

私が試した:

if(isset($_POST['submit']) && $_POST['checkGame'] != 'Any') 
    { 
     $game = $_POST['checkGame']; 
     $stmt = $mysqli->prepare("SELECT ipaddress, port FROM servers WHERE game=?"); 
     $stmt->bind_param("s", $game); 
     $stmt->execute(); 
     $result = $stmt->get_result(); 
     $stmt->fetch(); 
      while ($row=mysqli_fetch_array($result)) { 
      array_push($serverConnectionArray, ["address" =>$row['ipaddress'], "port" =>$row['port']]); 
     $stmt->close(); 
    } 
    } 

などを。しかし、私はこのエラーを取得する:

注意:未定義の変数:行上で... list.php mysqliの26

致命的なエラー:不明なエラー:中ヌルの準備メンバ関数の呼び出し().. .list.php:26スタックトレース:#0 {メイン}投げられた... list.php on line 26

ありがとう!

+1

'$ mysqli'は定義されていません... –

答えて

2

まず第一に、あなたは、APIのスタイルを混合しています。 MySQLi拡張は、オブジェクト指向(OOP)アプローチ( $mysqli->)または手続き型アプローチ( mysqli_*関数)の2つの方法で使用できます。両方のスタイルを混ぜることはできません。

OOPスタイルを使用するように見えますが、その場合は、あなたが最初に実際のmysqliオブジェクトを作成する必要があるもののようで、(もmysqli classのインスタンスと呼ばれる):

$mysqli = new mysqli('127.0.0.1', 'username', 'password', 'dbname'); 

はその後進める方法の詳細についてはbasic examples in the documentationを参照してください。


1)下記フレッド-II-さんのコメント@を参照してください:それは実際に混合することができるインターフェイスが判明。私はこれを知らなかった。
2)OPが単純に間違った変数名に対処したのか、OPが最初にMySQLi接続をインスタンス化するのを完全に忘れたのかという疑問は曖昧です。両方とも同じ通知を発する。

+0

ありがとう!これは、 "$ conn = mysqli_connect($ servername、$ username、$ password、$ dbname);"のような意味ですか? Nvmがあなたの編集を見ました。 – Leyer

+0

@Leyerそうですが、接続と対話したいときは、残りのコードで正しい変数名( '$ mysqli->'の代わりに '$ conn->')を使うようにしてください。 –

+1

* "両方のスタイルを混ぜることはできません。" * - それは間違いです。それはrecommentedではないが、彼らは一緒に働く。私はマニュアルのhttp://php.net/manual/en/mysqli.quickstart.dual-interface.phpから "Mixing styles"を引用しています:* "いつでもスタイルを切り替えることができます。コードの明快さとコーディングスタイルの理由でお勧めします。 "* –

-3

オブジェクトが正しく定義されていないようです。

$connection = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

+0

OPはPDO拡張を使用せず、MySQLi拡張を使用しています。 –

+0

私は変数にスペルミスがありました。ありがとう! – Leyer

関連する問題