この短いコードには非常に多くの欠陥があるため、初心者向けのチュートリアルを入手することをお勧めします。しかし、いくつかのことを説明するためにいくつかの努力をします。うまくいけば、それは役に立ちます。
最初のステップは行です。メソッドfunction advert($data)
にパラメータを渡しています。後で、戻りフィールドで$data
同じ変数を使用しています。$data
埋めたい変数を関数に知らせようとしたと思いますが、それは必要ありません。
あなたが何をしようとしているのかを正しく理解していれば、$id
パラメーターを渡します。次に、この関数を使用して、指定した ID に基づいて配列を取得できますが、常にクエリ文字列から取得する必要はありません (可能ですが)。
function advert($id) {
}
これで基本的なセットアップが完了しました。データベースから情報を取得します。コードは機能しますが、SQL インジェクションに対して脆弱です。それ自体がトピックなので、Google を使用して主題に関する情報を見つけることをお勧めします。ここでは、ユーザー入力を検証する必要があるとだけ述べておきます。この場合、ID が必要ですが、これは数値であると想定しているため、数値であることを確認してください。また、整数の ID を持っていると仮定します。
function advert($id) {
if (!is_int($id))
return "possible SQL injection.";
}
次に、ID が一意であり、返される結果が 1 つだけであることを前提とします。結果は 1 つしかないためLIMIT
、クエリでオプションを使用でき、while
ループは必要ありません。
また、mysql_
関数は非推奨であり、今後は使用しないでください。mysqli
またはに切り替えてみてくださいPDO
。しかし、今のところ、私はあなたのコードを使用します。
配列に ID だけを追加しても$data
無駄に思えますが、SQL テーブルから他の列を追加する方法は理解できたと思います。
function advert($id) {
if (!is_int($id))
return "possible SQL injection.";
$query = mysql_query("SELECT * FROM advertisement WHERE id = $id LIMIT 1");
$row = mysql_fetch_assoc($query);
$data = array(
'id' => $row['id']
);
return $data;
}
このメソッドを呼び出さないように、GET パラメータを使用できます。配列をエコーしても、期待した結果が得られない可能性が高いことに注意してください。結果を変数に保存してから、それを使い続けます。
$ad = advert($_GET['id']);
if (!is_array($ad)) {
echo $ad; //for sql injection message
} else {
print_r($ad) //to show array content
}