2009-04-14 9 views
2

私は現在表示されているレコードをカテゴリに配置するためのフォームを用意しています。私はそうするためにPHPを経由して、次のHTMLコードを使用しています:mysqlは文のパラメータと順序付けクエリを用意しました

<form name="categoryForm"> 
    <input name="radiobutton" type="radio" value="fakeapproved" />Fake (Approved)<p> 
    <input name="radiobutton" type="radio" value="fakesuspected" />Fake (Suspected)<p> 
    <input name="radiobutton" type="radio" value="keyword" />Forbidden Keywords<p> 
    <input name="radiobutton" type="radio" value="parallelimport" />Parallel Imports 
    <input name="Submit" type="submit" value="Update" onclick="handleClick(".$pk.");return false"/> 
</form> 

瞬間、私は単純にカテゴリ欄と、オークションのテーブルを持っており、このコラムは私の形で定義されたカテゴリのいずれかに設定されています。

この手法は、データの処理には効果がありませんので、カテゴリごとに別の列を持つように変更する予定です(trueまたはfalseに設定できます)。

私の知りたいのは、自分のフォームで定義されたテキストを使用して、自分のJavaScript関数を介してSQLクエリで取得できるかどうかです。

更新のオークションは、現時点では$ textfromfrom = trueを

を設定たとえば、私は以下のプリペアドステートメントを使用しています:

if($cmd=="addcat"){ 
    $alterQuery = "UPDATE auctions SET category = ? WHERE article_no= ?"; 
    if ($altRecord = $con->prepare($alterQuery)) { 
    $altRecord->bind_param("ss", $subcat, $pk); 
    $altRecord->execute(); 
    $altRecord->close(); 
    echo "true"; 
    } else { 
    echo "false"; 
    } 
} 

$alterQuery = "UPDATE auctions SET category = ? WHERE article_no= ?"; 

を交換する方法はあります $ alterQuery = "UPDATEオークションSET?= true WHERE article_no =?";

が、それはまた、ストレートの後に別のクエリを実行することが可能であろう、すなわち:

if($cmd=="addcat"){ 
    $alterQuery = "UPDATE auctions SET ? = true WHERE article_no= ?"; 
    $insertQuery = "INSERT into users (username, ?) values ?, true"; 
    if ($altRecord = $con->prepare($alterQuery)) { 
    $altRecord->bind_param("ss", $category, $pk); 
    $altRecord->execute(); 
    if ($insRecord = $con->prepare($insertQuery)) { 
    $insRecord->bind_param("ss", $category, $username); 
    $insRecord->execute(); 
    $insRecord->close(); 
    } 
    $altRecord->close(); 
    echo "true"; 
} else { 
    echo "false"; 
} 

次のように上記の方法を使用するための私の推論は次のとおりです。

オークションデータベースが別のソースからインポートされ、最後にカテゴリを追加する以外は、構造を変更することはできません。主キーなどは変更しないでください。

のみ4カテゴリ

がありますが、個々のオークションは、オークションのテーブルのみのオークションを扱う複数のカテゴリ

に属していてもよいです。私は主に新しいユーザー入力からなるusersテーブルが必要になります。

usersテーブルには、各ユーザーが、彼らはオークションを持っていたカテゴリで示すことができなければなりません。

ユーザーあたりのユーザーテーブルに複数のレコードがあってはなりません。ユーザー名は主キーとして機能します。

答えて

0

$ alterQuery = "UPDATEオークションSET?= true WHERE article_no =?";

いいえ、列名にクエリパラメータを使用することはできません。照会パラメーターは、のみ、SQL式のリテラル値の代わりに使用できます。

動的SQLを使用する必要があります。つまり、SQL文を文字列として作成し、アプリケーション変数を列名としてこの文字列に補間します。

+0

何かのような意味ですか? ";ここで、$ categoryは入力に基づいて定義できますか? –

+0

はい、正確です。クエリを準備する前に、すべてのテーブルと列の名前をSQL文字列で指定する必要があります。 –

0

データを変更する以外は何もしないクエリを準備する点です。 カテゴリごとに異なるクエリを用意することができます(カテゴリ名でインデックスされた配列に配置する)。 しかし、質問を準備することは実際には何の違いもありません。

+0

データを変更するものはありません。レコードが追加されるカテゴリは、事前定義されたリストの中から任意です。 –

1

古典的なデータベースの非正規化はここで起こります。あなたはこれをしたくありません。 を1列にしておくか、必要なように、オークションとタイプの間に1対多の関係を作成します。何かが間違っているという最初の兆候は、あなたがやろうとしていることをするための簡単な道がないということです。

auctions Table: 
auction_id 
--------- 
0 
1 
2 
3 

auctions Type: 
auction_type_id auction_id auction_type 
1    0   something 
2    0   othertype 
3    0   fake 
4    1   othertype 
5    2   fake 
6    3   fake 

あなたはまた、作成など、正規のより多くのレベルを追加することができます。

より良いアプローチは

は、それは次のようになり...オークションのテーブル、およびcategoryAuctionFormテーブルを作成することですオークションタイプの列。

ちょっと考えました。

+0

私は私が概説したアプローチを使用する必要がある理由を示すために私の質問を更新しました。私はあなたの考えを感謝します –

関連する問題