2009-04-14 89 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。

我想知道的是,如果可以在我的sql查詢中使用我的表單中定義的文本並通過我的javascript函數獲得的文本。

例如,更新拍賣設置$ textfromfrom =真

目前,我使用下面的事先準備好的聲明:

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 =「更新拍賣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類

的個人拍賣可能屬於多個類別

拍賣表只用拍賣交易。我將需要一個用戶表,它將主要由新的用戶輸入組成。

用戶表必須能夠顯示每個用戶,類別,他們在過拍賣。

有不能在每個用戶的用戶表中多條記錄。用戶名將作爲主鍵。

回答

0

$ alterQuery =「UPDATE auctions SET?= true WHERE article_no =?」;

不,您不能對列名使用查詢參數。查詢參數只能用於代替SQL表達式中的文字值。

您必須使用動態SQL。也就是說,將SQL語句形成一個字符串,並將您的應用程序變量插入到該字符串中作爲列名稱。

+0

您的意思是:$ alterQuery =「更新拍賣SET $ category = true WHERE article_no =? 「; $ category可以根據輸入來定義? – 2009-04-14 03:56:50

0

這是準備查詢的關鍵,除了數據將會改變之外什麼都沒有。 您可以爲每個類別準備不同的查詢(將它們放入按類別索引的數組中)。 但我懷疑準備查詢實際上會在這裏有所作爲。

+0

除了數據之外,沒有什麼會改變,只是記錄將添加到的類別是任意的,不在預定義的列表中。 – 2009-04-14 03:38:34

1

Yikes,這裏即將發生的經典數據庫非規範化。你不想這樣做。您想讓將其保留爲單列,或者,因爲它似乎需要在拍賣和類型之間創建一對多關係。你的第一個跡象表明有些事情是錯誤的,那就是沒有簡單的途徑去做你想做的事情。

一個更好的方法是創建一個拍賣臺,和categoryAuctionForm表...

它看起來像:

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 

您還可以添加正常化的多層次,如創建auction_type列。

只是我的想法。

+0

我已經更新了我的問題,以說明爲什麼我覺得我需要使用我概述的方法..我將非常感謝您的想法 – 2009-04-14 02:34:00