0

私がこのようなことをするとしましょう:

//get unit id
$query = "SELECT id FROM units WHERE unit_name = '".$unit."'";

$id = mysqli_query($con, $query);

$unit_id = 0;

while ($row = mysqli_fetch_array($id))
{
    $unit_id = $row['id'];
}

$unit_idwhile ループの外で変更されないのはなぜですか?

何が起こるか:ユニットのリストを含む選択ドロップダウンがあり、クリックするとphpコードが(ファイル内の他のコードとともに)起動され、IDが含まれる非表示の入力フィールドが作成されます。ID を再表示したところ、ID が正しくないことがわかりました。むしろ、表示とは、最初のオプション、1001、2 番目のオプション、1002、3 番目、1003などをクリックしたとします。これらidsは、私のデータベースにはまったく対応していませんが、データベースの単位は で始まり1001ます。そのため、私は自分の$unit_idコードが正しく読み取られておらず、どういうわけか PHP がそのように while ループの外で変数にアクセスすることを許可していないと思いました。その仮定は時期尚早だったことがわかりました。ありがとう。

4

3 に答える 3

1

考えられる 2 つの説明:

  1. クエリは失敗していますが、エラー レポートが無効になっています (また、MySQL エラーの出力/ログ記録も行っていません)。
  2. その名前の unit_name はありません。

デフォルトでエラー報告が有効になっていない場合は、次を入力してみてください。

ini_set('display_errors',1); 
error_reporting(E_ALL);

スクリプトの先頭に (ちなみに、開発環境では、エラー報告はデフォルトで有効にする必要があります)。また、次を使用して試すことができます。

$id = mysqli_query($con, $query) or trigger_error(mysqli_error($con));

発生した可能性のある MySQL エラーを表示します。

于 2013-11-09T19:33:30.623 に答える
1

実は変わります。

これには2つのケース..

  • たぶんあなたの$row['id']価値も0です。

[または]

  • クエリが (0 件の結果) を返し、ループに入っていません。
于 2013-11-09T19:36:50.627 に答える
0

何が起こるか:ユニットのリストを含む選択ドロップダウンがあり、クリックするとphpコードが(ファイル内の他のコードとともに)起動され、IDが含まれる非表示の入力フィールドが作成されます。ID を再表示したところ、ID が正しくないことがわかりました。むしろ、表示とは、最初のオプション、1001、2 番目のオプション、1002、3 番目、1003 などをクリックしたとします。これらの ID はデータベースにまったく対応していませんが、データベースでは単位は 1001 から始まります。以上のことから、$unit_id が適切に読み取られず、PHP がそのように while ループの外側で変数にアクセスできないと考えました。その仮定は時期尚早だったことがわかりました。ありがとう。

于 2013-11-09T20:39:18.303 に答える