0

私は PHP と mySQL の初心者で、自分のプロジェクトで使用しています。クエリに問題があります。

これは私のコードです:

    $doctname = mysql_query("SELECT name_of_doctor FROM {$table} WHERE department_no = '{$_REQUEST['deptno']}'");
    $doctnamerow = mysql_fetch_row($doctname);

    do
    {
        foreach ($doctnamerow as $cell)
        {
            $doctnamerowvalue = $cell;
        }
    } while ($doctnamerow = mysql_fetch_row($doctname));

したがって、私が抱えている問題は、医師の名前の間にスペースがある場合 (たとえば、「AJ Ramos」)、スペースをスキップして、姓ではなく「AJ」を返すように見えることです。どうすればいいですか?ありがとう =)

編集:

愚かな私、それは私のコードの単なるエラーでした.$doctnamerowvalueをテキストボックスの1つにvalue=$doctnamerowとして使用していましたが、二重引用符を忘れたため、値=医師名ではなく値=医師名になりました"。ごめん

4

3 に答える 3

1

フラッシュ コード レビュー:

  • mysql_*廃止されました。MySQLi または PDO を使用します。
  • あなたのコードはSQLインジェクションに対して広く開かれています
  • $doctornamerowvalue反復ごとに上書きされる
  • あなたがしforeachていることは無意味です。
  • 変数名の選択が不十分です。

ここでリファクタリングされます:

// do these in a config file !!!
$db = new PDO('mysql:dbname=' . DB_NAME . ';host=localhost', DB_USER, DB_PASS);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); // if you want to use associative arrays

// here is the refactored code
$query = "SELECT name_of_doctor FROM `{$table}` WHERE department_no = :deptno";

$stmt = $db->prepare($query);
$stmt->execute(array(':deptno' => $_REQUEST['deptno']));
$doctors = $stmt->fetchAll();

foreach ($doctors as $doctor) {
     echo $doctor['name_of_doctor'] . '<br>';
}

あなたの「バグ」に関連するもの

  • テーブル構造とデータを確認してください。フィールドに姓のみが含まれていて、名前が含まれている別のフィールドがある可能性があります。
  • テーブルの長さを確認してください。小さすぎる可能性があるため、文字列が切り詰められています。
于 2013-09-06T14:06:04.807 に答える
0

これを使用しました:

$doctname = mysql_query("SELECT name_of_doctor FROM {$table} WHERE department_no = '{$_REQUEST['deptno']}'");
$doctnamerow = mysql_fetch_row($doctname);


while ($raw = mysql_fetch_row($doctname)) {
echo $raw['name_of_doctor'];
}
于 2013-09-06T14:01:57.923 に答える