【发布时间】:2016-02-18 11:33:23
【问题描述】:
当拳击思维之外。我想出了以下解决方案:
$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
)
)
有人能解释一下解决方案吗?
【问题讨论】:
-
数据库中不应有用户定义的列。
-
为什么不呢?必须有一些解决方案来编辑它。
-
我不禁对这个解决方案投了反对票,因为您正在失去 PDO 的主要好处:准备好的语句的安全性。
-
你是什么意思?这是更新数据的解决方案。当他使用我的解决方案时,准备好的语句的安全方法就在他身上。此解决方案是整个脚本的示例。
-
您的示例不安全,因为您在查询中添加了一个变量,而不是使用占位符准备它。并且没有办法为列名使用占位符。所以,这对任何人来说都是不安全的。