1

ヘッダーのタイトルで並べ替えるテーブルを取得しようとしています。しかし、クエリを解析できません。MySQLで間違っていることはありますか?

何千ものレコードを含む仕事用の専門用語のテーブルを注文する必要があります。なので、うまくできるように家で練習しています。ただし、現時点では、その MySQL ビットに行き詰まっているようです。このコードが含まれている別の Web サイトのヒントに従いましたが、これが機能しない理由の説明が行き詰っています。

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="../demo.css" rel="stylesheet" type="text/css" />
</head>
<body>

    <?php
    function makeHeaderLink($value, $key, $col, $dir) {
        $out = "<a href=\"" . $_SERVER['SCRIPT_NAME'] . "?c=";
        //set column query string value
        switch($key) {
            case "Acronym":
                $out .= "1";
                break;
            case "Full Name":
                $out .= "2";
                break;
            case "What":
                $out .= "3";
                break;
            default:
                $out .= "0";
        }

        $out .= "&d=";

        //reverse sort if the current column is clicked
        if($key == $col) {
            switch($dir) {
                case "ASC":
                    $out .= "1";
                    break;
                default:
                    $out .= "0";
            }
        }
        else {
            //pass on current sort direction
            switch($dir) {
                case "ASC":
                    $out .= "0";
                    break;
                default:
                    $out .= "1";
            }
        }

        //complete link
        $out .= "\">$value</a>";

        return $out;
    }

    switch($_GET['c']) {
        case "1":
            $col = "Acronym";
            break;
        case "2":
            $col = "Full_Name";
            break;
        case "3":
            $col = "What";
            break;
                }

    if($_GET['d'] == "1") {
        $dir = "DESC";
    }
    else {
        $dir = "ASC";
    }

    if(!$link = mysql_connect("localhost", "username", "password")) {
        echo "Cannot connect to db server";
    }
    elseif(!mysql_select_db("nazir_jargon")) {
        echo "Cannot select database";
    }
    else {

        if(!$rs = mysql_query("SELECT 'Acronym', 'Full Name', 'What' * FROM jargon1 ORDER BY $col $dir")) {
            echo "Cannot parse query";
        }
        elseif(mysql_num_rows($rs) == 0) {
            echo "No records found";
        }
        else {
            echo "<table class=\"bordered\" cellspacing=\"0\">\n";
            echo "<tr>";
            echo "<th>" . makeHeaderLink("Acronym", "Acronym", $col, $dir) . "</th>";
            echo "<th>" . makeHeaderLink("Full Name", "Full_Name", $col, $dir) . "</th>";
            echo "<th>" . makeHeaderLink("What", "What", $col, $dir) . "</th>";
            echo "</tr>\n";
            while($row = mysql_fetch_array($rs)) {
                echo "<tr><td>$row[person_id]</td><td>$row[Acronym]</td><td>$row[Full_Name]</td><td>$row[What]</td></tr>\n";
            }
            echo "</table><br />\n";
        }
    }
    ?>
</body>

4

2 に答える 2

1

クエリから一重引用符&*を削除して、クエリが次のようになるようにします。私はそれがうまくいくことを願っています。

SELECT Acronym, Full Name, What FROM jargon1 ORDER BY $col $dir

それが機能しない場合は、

印刷できますか

echo "SELECT Acronym, Full Name, What FROM jargon1 ORDER BY $col $dir";

そして、あなたが何を得るのか教えてください。

注: backticks( `)を使用したかったと思いますが、誤って一重引用符を使用しました。


編集1

ご覧のとおり

echo "SELECT Acronym, Full Name, What FROM jargon1 ORDER BY $col $dir";

プリント

SELECT Acronym, Full Name, What FROM jargon1 ORDER BY ASC`

つまり$col、印刷されていません。何が問題になっているのかを確認してください。$col

SELECT Acronym, Full Name, What FROM jargon1 ORDER BY columnNameMissing ASC`
                                                      ^^^^^^^^^^^^^^^^^
于 2012-12-08T12:57:44.533 に答える
-1

返される列を指定している場合は、select クエリから * を削除します。それ以外の場合は、* を使用してすべてを取得します。どちらか一方。

于 2012-12-08T12:18:52.623 に答える