2016-05-13 17 views
-5

私は、ユーザからの入力を受け取り、データベースを検索するクエリを持っています。MySql、PHPエラー処理

入力によっては結果のサイズが異なる場合があります。

クエリこれは未定義未満124個の変数そのときのためのオフセット誤差を私に与え

$rows = $result->num_rows; 

for ($j = 0 ; $j < $rows ; ++$j) { 
    $result->data_seek($j); 
    $row = $result->fetch_array(MYSQLI_NUM); 

    //Display Results 

    for ($j = 0 ; $j <= 124 ; ++$j) echo "<td>$row[$j]</td>"; 
} 

$sql = "SELECT * FROM `$drop` WHERE `Stop Name` = '$input'"; 
$result = mysqli_query($conn, $sql); 

結果を示すために(おそらく表示することができ、そのほとんど)。

ここでコードに@を追加して、これらのエラーを無視します。

+4

代わりに 'foreach'ループを使うのはなぜですか?また、エラーを無視して解決しないでください。 – Epodax

+1

@を使用してエラーメッセージを非表示にしないでください。エラーを最初に解決してください! – pes502

+0

[Little Bobby](http://bobby-tables.com/)は[あなたのスクリプトはSQLインジェクション攻撃の危険にさらされていると言います。](http://stackoverflow.com/questions/60174/how-can-i-prevent -sql-injection-in-php)[MySQLi](http://php.net/manual/en/mysqli.quickstart)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)のステートメントについて学んでください。 .prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

答えて

4

は単にエラーを抑制するのではありません。

代わりに、あなたは配列の終わりに達したときにループを停止:

for ($j = 0 ; $j < count($row) ; ++$j) echo "<td>$row[$j]</td>"; 

サイドノート:あなたは両方のループのために同じイテレータ$jを使用しています。それは期待どおりに動作しません。