2016-12-28 13 views
0

mysqliコードをプリペアドステートメントを使用するように変更しようとしています。

何らかの理由で、私は通常の$row['']を動作させることはできません。私はしばらくの間googledが、私はちょうどそれを得ることはありません。プリペアドステートメントのない私のコードは次のようである:

if($result = mysqli_query($con,"SELECT * FROM users")) { 
     echo " 
      <thead> 
       <tr> 
       <th>1</th> 
       <th>2</th> 
       <th>3</th> 
       <th>4</th> 
       <th>5</th> 
       </tr> 
      </thead> 
      <tbody>"; 
     while($row = mysqli_fetch_array($result)) { 
      if($row['status'] == "1") { 
       echo '<tr class="active">'; 
      } elseif($row['status'] == "2") { 
       echo '<tr class="success">'; 
      } elseif($row['status'] == "0") { 
       echo '<tr class="danger">'; 
      } else { 
       echo '<tr class="warning">'; 
      } 
    etc... 

これは私がこれまでに準備された文としたものである:

$grab_user = $db->prepare("SELECT * FROM users"); 
if($grab_user->execute()) { 
    echo " 
     <thead> 
      <tr> 
      <th>1</th> 
      <th>2</th> 
      <th>3</th> 
      <th>4</th> 
      <th>5</th> 
      </tr> 
     </thead> 
     <tbody>"; 

    while($grab_user->fetch()) { 
     $row = $grab_user->fetch_row(); 

     if($row['status'] == "1") { 
      echo '<tr class="active">'; 
     } elseif($row['status'] == "2") { 
      echo '<tr class="success">'; 
     } elseif($row['status'] == "0") { 
      echo '<tr class="danger">'; 
     } else { 
      echo '<tr class="warning">'; 
     } 

明らかに動作するようには思えません。私は間違って何をしていますか?

+0

これは本当にあなたの質問に答えるのではないが、そのような静的なクエリの場合は、mysqli_query()を使用するだけで何も問題はない。パラメータをバインドしていないため、プリペアドステートメントをそのようなクエリで使用することはあまり効果がありません。プリペアドステートメントは、異なる入力で同じステートメントを繰り返し実行しているときに、SQLインジェクションを防止し、パフォーマンスを向上させるのに役立ちます。 –

+0

私は、準備されたステートメントの一般的な使い方を学ぶべきではないと言っているわけではありません。あなたは間違いなくすべきです。この特定の場合にはそれほど有用ではありません。また、パラメータをバインドする必要がある場合には、mysqliよりもPDOの方がずっと簡単です。準備文に移行するのがまだ早い場合は、代わりにPDOを試すことを検討してください。 –

答えて

1

fetch_rowは、結果セットから1行のデータを取り出し、それを列挙型配列として返します。各列は、から始まる配列オフセットに格納されます。

だから、$row[0]のようになります。ステータスのインデックスを見つけ、適切な値を使用します。


カラム名でアクセスする必要がある場合は、fetch_assocを使用する必要があります。数値配列

fetch_assoc - - 連想配列

+0

ありがとうございます。そして、@私がquery()がうまくいくのでパニックにはならない – MMQVBN

1

あなたが連想配列にしたい場合は、あなたがfetch_assoc()、ないfetch_row()を使用する必要があり、どの

while($row=$grab_user->fetch_assoc()) {  
    if($row['status'] == "1") { 
     echo '<tr class="active">'; 
    } elseif($row['status'] == "2") { 
     echo '<tr class="success">'; 
    } elseif($row['status'] == "0") { 
     echo '<tr class="danger">'; 
    } else { 
     echo '<tr class="warning">'; 
    } 
} 

fetch_row:このような

数値配列を返します。

また、fetch()fetch_assoc()の両方を呼び出してはいけません。それぞれが次の行を読むので、fetch_assoc()は結果の1行おきにしか得られません。だからそれはする必要があります: