0

MySQLステートメント内のORDERBY$ variable1$variable2に2つの変数を渡そうとしています。変数は、ドロップダウンメニューフォームから取得されます。

PHP

if(isset($_POST['order'])){
         $sort1 = mysql_real_escape_string($_POST['sort']);
         $sort2 = mysql_real_escape_string($_POST['order']);
        }
        if(!@$_POST['order']){
            $sort1 = 'ID';
            $sort2 = 'DESC';
        }
        $topics = mysql_query(" SELECT topic_id AS 'ID', topic_head AS 'Title', 
                                       topic_tags AS 'TAGS', topic_owner AS 'CREATED BY', topic_date AS 'CREATED ON'
                                FROM   forum_topics 
                                ORDER BY '{$sort1}' '{$sort2}'  ") or die (mysql_error());
                        ?>

HTMLフォーム

<ul class="sort">
        <li><form action="topics.php" method="post">
                <label class="label">Sort Table By</label>
                <select name="sort">
                    <option value ="">    </option>
                    <option value ="ID">ID</option>
                    <option value ="Title">Title</option>
                    <option value ="TAGS">TAGS</option>
                    <option value ="VIEWS">VIEWS</option>
                    <option value ="CREATED ON">CREATED ON</option>
                    <option value ="CREATED BY">CREATED BY</option>
                </select>

                <label class="label">Order By</label>

                <select name = "order" class="tap_Select">
                    <option value ="">    </option>
                    <option value ="ASC">Ascending</option>
                    <option value ="DESC">Descending</option>
                </select>

                <input type="submit" name="order" value="SORT" >
           </form>
        </li>
    </ul>

助けてください。

アップデート

$sort1と$sort2の周りの引用符を削除すると

このエラーが発生します: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SORT' at line 4

更新2

$ sql = "....."を実行したとき、mysql_querry()を経由せずにこれを取得しました

SELECT topic_id AS 'ID', topic_head AS 'Title', topic_tags AS 'TAGS', topic_owner AS 'CREATED BY', topic_date AS 'CREATED ON' FROM forum_topics ORDER BY ID SORT

4

5 に答える 5

6

引用符は使用しないでください。例:

ORDER BY 'ID' 'DESC'

間違っている。そのはず

ORDER BY ID DESC

引用符は、idとdescをキーワード/フィールド名ではなく、プレーンな文字列に変換します。

于 2012-09-11T20:42:11.637 に答える
1

角かっこを削除し、並べ替え要素の間にコンマを追加します

ORDER BY $sort1 $sort2  ") or die (

編集:何が起こっているかを確認できるように、次の変更を加えます...

この行を取る

$topics = mysql_query(" SELECT topic_id AS 'ID', topic_head AS 'Title',  
                                   topic_tags AS 'TAGS', topic_owner AS 'CREATED BY', topic_date AS 'CREATED ON' 
                            FROM   forum_topics  
                            ORDER BY '{$sort1}' '{$sort2}'  ") or die (mysql_error()); 

クエリを変数に貼り付け、mysql_queryの文字列を変数に置き換えます。

$query="SELECT topic_id AS 'ID', topic_head AS 'Title',  
                                   topic_tags AS 'TAGS', topic_owner AS 'CREATED BY', topic_date AS 'CREATED ON' 
                            FROM   forum_topics  
                            ORDER BY '{$sort1}' '{$sort2}'  ";
$topics = mysql_query($query) or die (mysql_error()); 

次に、クエリをエコーし​​、結果を切り取って質問に貼り付けます。思ったとおりに何かが起こっていない。

echo $query;
于 2012-09-11T20:43:41.710 に答える
1

列名にスペースが含まれているようです。そのため、バッククォートを使用する必要があります。

ORDER BY `{$sort1}` {$sort2}

また、条項mysql_real_escape_stringの場合には保護を提供しないことに注意してください。ORDER BY許可された入力のホワイトリストに対して入力を確認する必要があります。

于 2012-09-11T21:13:44.110 に答える
0
$topics = mysql_query("SELECT
    topic_id AS `ID`,
    topic_head AS `Title`, 
    topic_tags AS `TAGS`,
    topic_owner AS `CREATED BY`,
    topic_date AS `CREATED ON`
FROM   forum_topics 
ORDER BY {$sort1} {$sort2}'
") or die (mysql_error());

'約ORDERBY値を削除する必要があります。また、エイリアス値の周りのバックティックの推奨される使用にも注意してください。

mysql_ *は非推奨であるため、mysqli_ *またはPDOを使用する必要があることにも注意してください(ほとんどのmysql_ *関連機能全体で、PHP.netの大きな赤い警告を参照してください。

于 2012-09-11T20:46:42.467 に答える
0

次の構文は、PHP7.4.12およびMySQL5.7.32で機能しています。

$sort = sanitize_text_field($_POST['sort']; // e.g., 'title'
$order = sanitize_text_field($_POST['order']; // e.g., 'ASC'
$order_by = $sort . ' ' . $order;

$results = $wpdb->get_results( "
    SELECT
        *
    FROM
        MyTable
    ORDER BY
        $order_by
" );
于 2021-07-10T11:41:40.507 に答える