mysql подготовил параметры оператора и запросы заказа - PullRequest
2 голосов
/ 14 апреля 2009

У меня есть форма, цель которой - поместить текущую отображаемую запись в категорию. Я использую следующий HTML-код через php для этого:

<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 = "ОБНОВЛЕНИЕ аукционов SET? = true ГДЕ 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 категории

Индивидуальный аукцион может принадлежать более чем одной категории

Таблица аукционов касается только аукционов. Мне понадобится таблица пользователей, которая будет состоять в основном из нового пользовательского ввода.

Таблица пользователей должна отображать для каждого пользователя категории, в которых он проводил аукционы.

Не должно быть более одной записи в таблице пользователей на пользователя. Имя пользователя будет действовать как первичный ключ.

Ответы [ 3 ]

1 голос
/ 14 апреля 2009

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 голосов
/ 14 апреля 2009

$ alterQuery = "ОБНОВЛЕНИЕ аукционов SET? = True ГДЕ article_no =?";

Нет, вы не можете использовать параметры запроса для имен столбцов. Параметры запроса могут использоваться только вместо буквального значения в выражении SQL.

Вам придется использовать динамический SQL. То есть сформируйте оператор SQL в виде строки и вставьте переменные приложения в эту строку в виде имен столбцов.

0 голосов
/ 14 апреля 2009

Смысл подготовки запросов заключается в том, что ничего, кроме данных, не изменится. Вы можете подготовить различные запросы для каждой категории (поместите их в массив, проиндексированный по имени категории). Но я сомневаюсь, что подготовка запросов на самом деле будет иметь значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...