0

こんにちは、データを返す関数を作成したいです。たとえば、関数 advert がある場合、必要なものを毎回表示したいのですが、テーブル ID、sub_id、名前、日付があり、その関数を作成したいです。広告(id)、広告(名前)が必要なものを毎回印刷できます。正確に必要なものを毎回表示するようにし、すべての結果を配列に保存し、毎回正確な行を取得したい私が欲しい

<?php
    function advert($data){

    $id = $_GET['id'];
    $query = mysql_query("SELECT *FROM advertisement WHERE id = $id");
    while($row = mysql_fetch_assoc($query)){
        $data = array(
        'id'        => $row['id']
        );
    }
    return $data;
}
    echo  advert($data['id']);
    ?>

しかし、私の結果は毎回空です。助けてください。

4

4 に答える 4

1

この短いコードには非常に多くの欠陥があるため、初心者向けのチュートリアルを入手することをお勧めします。しかし、いくつかのことを説明するためにいくつかの努力をします。うまくいけば、それは役に立ちます。

最初のステップは行です。メソッド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
}
于 2013-03-25T11:36:22.243 に答える
0

Id として as を渡す場合のように、返される結果に特定の列の値を表示しますか? Id 列のデータのみを返します。行配列のすべてのキーをループし、着信列名と一致すると、値を取得してループを中断できます。

このリンクを確認してください: php & mysql - 単一行の列をループし、値を配列に渡します

于 2013-03-25T11:16:33.490 に答える
-1

これを試して:

<?php
function advert($id){
$data= array();
//$id = $_GET['id'];
$query = mysql_query("SELECT *FROM advertisement WHERE id = $id");
while($row = mysql_fetch_assoc($query)){
     array_push($data,$row['id']);
}
return $data;
}
var_dump($data);
//echo  advert($data['id']);
?>
于 2013-03-25T11:07:49.163 に答える
-1

すでに ID を関数の引数として渡しています。*と の間にもスペースを入れてFROMください。

そのため、以下のように使用してください。

$query = mysql_query("SELECT * FROM advertisement WHERE id = '".$data."'");

また

function advert($id)
{
    $query = mysql_query("SELECT * FROM advertisement WHERE id = '".$id."'");
    $data = array();
    while($row = mysql_fetch_assoc($query))
    {
        $data[] = $row;
    }
    return $data;
}

代わりにまたはmysql_*を使用することは推奨されていないため、使用しないでください。PDOMYSQLI_*

于 2013-03-25T11:06:27.580 に答える