mysql编写了语句参数和排序查询

时间:2009-04-14 02:07:55

标签: php sql mysql

我有一个表单,其目的是将当前显示的记录放入一个类别中。我通过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表中不得有多条记录。用户名将作为主键。

3 个答案:

答案 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语句形成为字符串,并将应用程序变量作为列名插入此字符串中。