1

だからここに私が達成しようとしていることがあります: 私は過去に何度も SQL を扱ってきましたが、それは常にコールドフュージョンであり、PHP では決してありませんでした。私はSQLクエリを作成するための構文を調べて、これを思いつきました(準備を使用するとSQLインジェクションから保護できると信じています)。私の全体的な目標は、カテゴリ テーブルに対応する cat_id を持つジュエリー テーブルからすべての行を取得するようにページを設定することです。これを正しく開始するかどうかはわかりません。ジュエリー テーブルには 4 つのフィールド (id、cat id、name、および image) があります。

<?php

 $categorys = $wpdb->get_results ( $wpdb->prepare("SELECT id FROM $wpdb->categories
        WHERE name = '(the_slug())'") );

    $jewelrys = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->jewelry
        WHERE post_status = 'publish'
        AND cat_id = $categorys->id ") );

    foreach ($jewelrys as $jewelry) {
    echo '<div id="jBox"><a href="/wp-includes/images/jewelryImages/' . $jewelry->image . '"><img src="/wp-includes/images/jewelryImages/' . $jewelry->image . '" /><br />' . $jewelry->name . '</div>';
    }
?>

また、ページごとに9つだけ表示するページネーションを追加しようとしています。ヒントやガイダンスは大歓迎です=)

更新:単純な echo ステートメントを使用してカテゴリをテストし、何かをプルしたかどうかを確認しましたが、そうではありませんでした。これはコードが間違っていますか?

4

1 に答える 1

3

SQLインジェクションを回避するには、プリペアドステートメントを使用します。これにより、変数の項をSQLコマンドの一部にするのではなく、パラメーター(SQLを評価しないことがわかっている)としてMySQLに渡すことができます。

PHPでSQLインジェクションを防ぐにはどうすればよいですか?を参照してください。

LIMITページ付けを実装するには、MySQLの句を調べます-例:

SELECT ... LIMIT  0,9;  -- get 9 records starting from record 0
SELECT ... LIMIT  9,9;  -- get 9 records starting from record 9
SELECT ... LIMIT 18,9;  -- get 9 records starting from record 18
-- etc
于 2012-04-27T16:41:11.817 に答える