我试图为我的家庭编写一个简单的购物清单网络应用程序,用户可以检查他们想要添加到列表中的项目,然后将其添加到表中以供将来检索。但是在尝试将数组和用户名插入MySQL数据库时遇到了麻烦。我已经四处寻找答案,但找不到满足以下条件的答案:
理想情况下,我很乐意使用PDO,因为我有一些使用PDO的其他查询。我知道数组正在传递,因为我在我希望执行查询的页面上成功打印出来。以下是我到目前为止的情况。
HTML表单(复选框值从另一个MySQL表填充):
<div class="ui-body">
<? while($row = $resultRedMeat->fetch(PDO::FETCH_ASSOC)){
echo '<label><input type="checkbox" id="groceryListItem[]" name="groceryListItem[]" value="'.$row['food'].'">'.$row['food'].'</label>';
}?>
</div>
要插入的PHP代码
$groceryListItems = $_POST['groceryListItem'];
$q = $db->prepare("INSERT INTO `grocerylist`
SET `username` = $username, `food` = ?");
foreach((array)$groceryListItems as $groceryListItem){
$q ->execute($username, array($groceryListItem['groceryListItem']));
}
我在错误日志中收到的错误是:
虽然传递的所有值都来自数据库并且没有用户输入,但是如果你们认为防止注入仍然是好的,那么在这种情况下我也不会考虑一些建议。 。
非常感谢你的帮助!
答案 0 :(得分:1)
一些事情。
您的print_r($groceryListItems)
的结构不符合您的想法。使用print_r($grocery_list_items);
Array ( [0] => Ground Beef (Extra Lean),
[1] => Flank Steak,
[2] => Roast )
查看数组并找出如何访问所需元素。
重新。您的评论:
$foreach( $grocery_list_items as $key=>$value ){
//$key will be 0 then 1 the 2
//$value will be Ground Beef (Extra Lean) then Flank Steak then Roast
}
如果循环遍历此数组;
SET username = $username
在您的查询中,您有$username
,但是您尝试将用户名作为参数传递。将?
替换为PDO::execute
INSERT INTO `grocerylist` (`username`,`food`) VALUES (?,?);
期望一个参数是一个传递给查询的参数数组。 Read me
因此将$ username和greoceryitem组合成一个数组以传递给执行。
此外,您的查询混合了UPDATE和INSERT语法。 如果您尝试运行INSERT查询,则应该是;
{{1}}