Когда за пределами бокса думаешь. Я придумал следующее решение:
$column = 'product';
$enum = '1';
$product_access = $dbh->prepare("UPDATE products_access SET {$column} = :enum WHERE products_access.id = :id");
$product_accessvar = trim($user['id']);
$product_access->bindParam(':id', $product_accessvar, PDO::PARAM_INT);
$product_access->bindParam(':enum', $enum, PDO::PARAM_INT);
//$product_access->bindParam(':product_enum', $enum);
//foreach($_POST["checkbox2"] as $loc_id)
$product_access->execute();
Спасибо за вашу помощь, может быть, я могу помочь кому-то с моим решением. Это работает для меня сейчас!
У меня есть вопрос о моем следующем проекте. Я строю таблицу SQL, где пользователи могут добавлять пользовательские столбцы с перечисление значение. Но пользователь также может обновить значение этого столбца. Я не могу установить имя столбца, потому что все они сделаны пользователем, поэтому имя столбца отсутствует.
Мой SQL:
tabel `products_access`
--
CREATE TABLE IF NOT EXISTS `products_access` (
`id` int(30) NOT NULL,
`user_id` int(30) NOT NULL,
`product 2` enum('0','1') NOT NULL COMMENT 'Dit is een product beschrijving van product 2.dgfdg'
)
Массив:
Array
(
[id] => 17
[name] => product 2
[number] => 2002
[description] => Dit is een product beschrijving van product 2.
[mount] => 34
[price] => 6778
[deleted] => 0
[user_id] => 17
[product 2] => 1
)
Автор сценария:
<label>
<input name="clickedproduct[]" type="checkbox" value="<?php echo $avlue['id']; ?>" <?php echo (($_SERVER['REQUEST_METHOD'] == 'POST') ? ((isset($_POST[$avlue['name']])) ? ' value="'.$avlue[$avlue['name']].'" checked' : ' value="'.$avlue[$avlue['name']].'"') : (($avlue[$avlue['name']] == '1') ? ' value="'.$avlue[$avlue['name']].'"checked' : ' value="'.$avlue[$avlue['name']].'"')); ?>>
<?php echo $avlue['name']; ?>
</label>
PDO:
$product_access = $dbh->prepare('UPDATE products_access() VALUES(:id, :loc)');
$product_access->bindValue(':id', $id);
$product_access->bindParam(':loc', $loc_id);
foreach($_POST["checkbox2"] as $loc_id) $product_access->execute();
Ниже массив после сохранения.
Array
(
[username] => joshua
[rank] => Array
(
[0] => 0
)
[koppel] => Array
(
[0] => 1
)
[clickedproduct] => Array
(
[0] => 17
)
)
Кто-нибудь может объяснить решение?
Такое приложение обычно реализуется с использованием таблицы метаданных, также известной как хранилище ключей / значений.
Каждая строка этой таблицы метаданных идентифицирует
Добавить метаданные к объекту легко. Вставьте строку в таблицу метаданных, указав желаемое «имя столбца» и значение. Это немного сложнее, чтобы получить его. Вам нужен запрос, например, такой.
SELECT p.product_id, a.val as price, b.val as mount
FROM product p
LEFT JOIN metadata a ON a.product_id = p.product_id AND a.key='price'
LEFT JOIN metadata b ON b.product_id = p.product_id AND b.key='mount'
WordPress-х таблица wp_postmeta Настройка является хорошим и широко используемым примером этого шаблона проектирования данных. Оно имеет работоспособный API.
Обычно считается плохой практикой использовать команды языка определения данных (например, ALTER TABLE CHANGE colname newcolname INT
) в производстве. С одной стороны, эти команды довольно медленные и небезопасные. С другой стороны, когда схема содержит все виды пользовательских столбцов, трудно устранить неполадки. Вам лучше использовать код приложения, как я предложил здесь, чтобы позволить вашим пользователям создавать свои собственные ключи данных и значения.
Надеюсь, что это поможет.