-5

私のphp関数の構文に何か問題があるに違いないと思いますが、それが何であるかはわかりません。誰でもそれを見つけることができますか?

function sortByMetal() {
    global $conn;

    $query = "SELECT * FROM necklaces WHERE metal_id = 1 AND color_id = 2";
    $result = mysql_query($query, $conn);

    $output = "";
    while ($necklaces = mysql_fetch_array($result)) {
            $output .= $necklaces['name'];
    }
    return $output;
}
4

4 に答える 4

7

構文エラーは見当たりませんが、それほど重要ではない問題がいくつか見られます。

  1. グローバルを使用しています。
  2. 関数を使用していmysql_*ます。
  3. 必要以上のデータを選択しています。

これらのそれぞれに対処しましょう:

グローバルを使用しています

グローバル変数を使用しないでください。代わりに、必要なものを引数として関数に渡します。

function sortByMetal($conn) {

mysql_*関数を使用しています

mysql_*新しいコードに関数を使用しないでください。それらはもはや保守されておらず、コミュニティは非推奨プロセスを開始しています。赤いボックスが見えますか? 代わりに、準備済みステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。決められない場合は、この記事を参考にしてください。学習したい場合は、ここに良い PDO チュートリアルがあります。

必要以上のデータを選択しています

SELECT *のみを使用する場合は使用しないでくださいnameSELECT `name`必要なデータのみを選択するために使用できます。


すべてを学んだ後、私はこれを思いつきました:

/**
 * @param PDO $conn
 *
 * @return string
 */
function sortByMetal(PDO $conn) {
    $query = <<<MySQL
SELECT `name`
  FROM `necklaces`
  WHERE `metal_id` = 1
    AND `color_id` = 2;
MySQL;
    $stmt = $conn->prepare($query);
    $stmt->execute();

    $result = "";
    while ($necklace = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $result .= $necklace['name'];
    }

    return $result;
}

これらすべての問題を一度に解決します。このコードで私が行ったことについて学ぶために、私が提供したリンクについて読む時間をとってください。

于 2012-06-16T19:18:24.720 に答える
1

私が見る唯一のこと(他の回答の非常に有効な点を除いて):単語をスペースで区切らないため、出力文字列は醜くなります。

おそらく、GROUP_CONCAT を使用して別の SQL クエリを使用できるので、すぐに名前の優れたリストを取得できます。

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

SELECT GROUP_CONCAT( necklaces.name )
FROM necklaces
WHERE metal_id = 1 AND color_id = 2
GROUP BY NULL; -- force group by
于 2012-06-16T19:23:09.893 に答える
0

テーブルと $conn が正しく設定されていると仮定すると、目立ったものは何もありません。

mysql_error(); 行の後に行を追加することから始め ます。これにより$result、mysql エラーが表示されます。

また、既に mysql データベース接続を実行していると仮定すると,$conn)mysql_query.

それを試して、何が得られるか見てください。

于 2012-06-16T19:17:21.443 に答える
0

フィールドが正しいかどうか、またはグローバル変数が正しいかどうかを確認してください。

于 2012-06-16T19:19:27.470 に答える