0

何らかの理由で、これは私にエラーを与えていますか?

$result = mysql_query("SELECT wpjb_job.*,
                              wpjb_category.* 
                         FROM wpjb_job , 
                              wpjb_category
                        WHERE (is_filled='0' AND is_active='1')
                          AND wpjb_job.job_category = wpjb_category.id
                          AND job_country={$countryid}
                        ORDER BY wpjb_job.job_title") or die(mysql_error());

これはエラーです: SQL 構文にエラーがあります。6行目の「ORDER BY wpjb_job.job_title」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

私が解決できる限り、サーバーにはmySQL 5.1があります。コードは引き続き機能しますが、表の後にエラーが発生します。

テスト用に次のように変更しました。 現在は正常に動作していますが、表の見出しが最初と最後に 2 回出力されます。変更は $countryid にあります。現在は「$countryid」として配置していますが、これによりエラーは発生しません

表の印刷を含むコードの下

$joburl = "http://www.x.com/job/view/";
        $result = mysql_query("SELECT wpjb_job.*,wpjb_category.* 
                                    FROM wpjb_job , wpjb_category
                                        WHERE (is_filled='0' AND is_active='1')
                                        AND wpjb_job.job_category = wpjb_category.id
                                        AND job_country='$countryid' 
                                        ORDER BY job_title") 
                    or die(mysql_error());

        echo "<table border='1'>";
        echo "<tr> <th>Job</th> <th>Company</th> <th>Industry</th> </tr>";

// keeps getting the next row until there are no more to get

    while($row = mysql_fetch_array( $result )) {

// Print out the contents of each row into a table

        echo "<tr><td>"; 
        echo '<a href ="http://www.x.com/job/view/'.$row['job_slug'].'"> '.$row['job_title'].' </a>';
        echo "</td><td>"; 
        echo $row['company_name'];
        echo "</td><td>";
        echo $row['title'];
        echo "</td></tr>"; 
    } 
    echo "</table>";
    }
4

1 に答える 1

1

中かっこ (複雑な構文) は、通常、配列要素またはオブジェクト プロパティおよびその他の複雑な式 ({$array[val]}または{$this->object}) を評価するためにのみ使用されます。クエリからそれらを削除できます。これにより、PHP のバージョンと変数のスコープによっては、クエリが解釈されない場合があります。echoクエリ文字列に対して を実行することで確認できます ( echo "SELECT {$countryid}";)。

また、mysql_関数は非推奨になりつつあります。ユーザーが生成した変数を渡す場合は、mysqli_または関数を使用してパラメーターをバインドする必要があります。PDO

クエリは暗黙の結合構文も使用しています。結合クエリを記述するときは、明示的な構文を練習する必要があります (以下を参照)。SELECT *最後に、不必要なオーバーヘッドを防ぐために、すべてを選択する ( ) のではなく、常に列リストを使用してください。

SELECT a.col1, a.col2, b.col1
FROM wpjb_job a
INNER JOIN wpjb_category b ON b.id = a.job_category
WHERE (is_filled=0 AND is_active=1)
    AND a.job_country = $countryid
ORDER BY a.job_title
于 2012-10-15T22:52:44.173 に答える