0

私が構築している単純なフォーラムのDBにアクセスするために、次のPHPがあります。

$sql = "
    SELECT
        categories.cat_id,
        categories.cat_name,
        categories.cat_description
    FROM
        categories
    WHERE
        categories.cat_id = '" . mysql_real_escape_string($_GET['id']) ."'
";                        
$result = mysql_query($sql);

//If data is unable to be served...
if (!$result) { 
    echo 'Category could not be displayed! Please try again later' . mysql_error();
} else {
    if(mysql_num_rows($result) == 0) {
        //This is the error code being displayed
        echo 'Category does not exist!';
    }
}

DBのこのセクションのコードは次のとおりです。

CREATE TABLE categories(
    cat_id          INT(8) NOT NULL AUTO_INCREMENT,
    cat_name        VARCHAR(255) NOT NULL,
    cat_description VARCHAR(255) NOT NULL,
    UNIQUE INDEX
    cat_name_unique (cat_name),
    PRIMARY KEY(cat_id)
)
TYPE=INNODB;

問題:何らかの理由で、クエリがDBから行データを正しくプルしていないようですが、なぜそれが機能しないのか迷っています。そうは言っても、私は一般的にMySQLとSQLにも不慣れです。何が起こっているのかについて誰かが何か考えを持っていますか?簡単に言うと、MySQLクエリがPHPコードのデータにアクセスしないのはなぜですか?

どんな助けでも大歓迎です!

ありがとう!

アップデート:

SQLクエリを次のように変更した後:

categories.cat_id = " . mysql_real_escape_string($_GET['id']);

これで元の問題は解決しましたが、別の問題が浮き彫りになりました。

私は今エラーコードを受け取っています:

echo 'Category could not be displayed! Please try again later' . mysql_error();

SQL出力あり:

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 '' at line 8

私は以前にこの問題に実際に遭遇しましたが、それを修正しようとして、私が投稿した元のコードを思いつきました。PHPファイル全体で同様のコードが機能しているため、DBコードで作成したエラーであると思われます。

4

1 に答える 1

1

それでも、返されるエラーを確認することはできますが、その間にテーブルdefによると、cat_idintです。

ただし、一重引用符で囲んで渡します。つまり、PHPでエラーが発生しない文字列の場合は、mySQLから取得します。

これを変更することをお勧めします

categories.cat_id = '" . mysql_real_escape_string($_GET['id']) . "'";

categories.cat_id = " . intval( mysql_real_escape_string($_GET['id']) );

$_GET['id']文字列を返す場合、またはDBMSがに設定されている場合、DBMSエラーが発生する可能性は低くなります。strict_mode

理想的には、から取得した値をテスト$_GETし、それらを渡す前に誤った型を適切に処理して、PHPまたはmySqlのいずれかがエラーを生成しないようにすることができます。

于 2013-03-25T05:21:33.513 に答える