php - mysql准备语句参数和排序查询

标签 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。

我想知道的是,是否可以在我的 sql 查询中使用在我的表单中定义并通过我的 javascript 函数获得的文本。

例如,更新拍卖集 $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 auctions 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类

单个拍卖可能属于多个类别

拍卖表只处理拍卖。我需要一个用户表,其中主要包含新用户输入。

用户表必须能够为每个用户显示他们参与拍卖的类别。

每个用户在用户表中的记录不能超过一条。用户名将作为主键。

最佳答案

哎呀,经典的数据库非规范化即将发生。你不想这样做。您希望将其保留在一个单独的列中,或者,正如看起来需要的那样,在拍卖和类型之间创建一对多的关系。出现问题的第一个迹象是没有简单的途径来完成您想要做的事情。

更好的方法是创建一个拍卖表和一个 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 列。

只是我的想法。

关于php - mysql准备语句参数和排序查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/746075/

相关文章:

php - for循环如何工作?这有什么问题吗?

php - 不使用 Objective C 向 PHP POST web 服务提交数据

mysql - 编写脚本以在 SQL 中转换 varchar 数据

php - 复选框正在检查

php - MySQLi 准备好的语句不返回任何内容

php - Doxygen:如何记录 PHP 常量?

mysql - 我应该如何构建具有松散关系的 SQL 数据库

sql - 选择组中的所有行都不为空 postgresql

Mysql 最大用户连接数错误

java - 将Java连接到MySQL数据库