$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表,用户可以在其中添加带有 enum 值的自定义列。但是用户也可以更新此列的值。我无法设置任何列名,因为它们都是由用户自定义的,因此没有列名。
我的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
)
)
有人可以解释一下这个解决方案吗?
答案 0 :(得分:1)
这种应用程序通常使用元数据表来实现,也称为键/值存储。
此元数据表的每一行都标识
向对象添加元数据很容易。在元数据表中插入一行,给出&#34;列名称&#34;你想要的和价值。检索它有点棘手。例如,您需要一个查询。
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 table设置是此数据设计模式的一个很好且广泛使用的示例。它有一个workable API。
在生产中使用数据定义语言命令(如ALTER TABLE CHANGE colname newcolname INT
)通常被认为是不好的做法。一方面,这些命令非常慢且线程不安全。另一方面,当架构包含各种用户定义的列时,很难排除故障。您最好使用应用程序代码,就像我在此处建议的那样,允许您的用户创建自己的数据键和值。
答案 1 :(得分:0)
希望这会有所帮助。