我有一个表单,其目的是将当前显示的记录放入一个类别中。我通过php使用以下html代码:
<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>
目前,我只有一个带有类别列的AUCTIONS表,此列设置为我表单中定义的类别之一。
这种方法对我需要处理的数据无效,因此我打算将其更改为每个类别都有一个单独的列,可以设置为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 auction 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表中不得有多条记录。用户名将作为主键。
答案 0 :(得分: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列。
只是我的想法。
答案 1 :(得分:0)
准备查询除了数据之外什么都不会改变。 您可以为每个类别准备不同的查询(将它们放入按类别名称索引的数组中)。 但我怀疑准备查询实际上会有所不同。
答案 2 :(得分:0)
$ alterQuery =“UPDATE auction SET?= true WHERE article_no =?”;
不,您不能对列名使用查询参数。查询参数只能用 代替SQL表达式中的文字值。
您必须使用动态SQL。也就是说,将SQL语句形成为字符串,并将应用程序变量作为列名插入此字符串中。