PHP准备语句数组更新

时间:2013-07-09 21:06:20

标签: php mysqli prepared-statement

这是另一篇帖子(link

的后续问题

我正在尝试使用预准备语句来处理我如何执行mysql更新。我需要添加WHERE id =?..我很困惑我是如何从我的数组中获取的。谢谢!

我的表单:

<form action="update.php" method="post">

  <input type="hidden" name="id" value=""/>
  <input type="text" name="name" value=""/>
  <input type="text" name="age" value=""/>

  <input type="hidden" name="id" value=""/>
  <input type="text" name="name" value=""/>
  <input type="text" name="age" value=""/>

  <input type="submit" value="submit" name="submit" />
</form>

PHP:

// Create statement object
$stmt = $db->stmt_init();


if (isset($_POST['submit'])) {

// Create a prepared statement
if($stmt->prepare("UPDATE contact SET (name, age) VALUES (?, ?)")) {

    // Bind your variables to replace the ?s
    $stmt->bind_param('si', $name, $age);


    $returnedData = $_POST['data'];

for($i=0;$i<count($returnedData);$i+=3){
    $id = $returnedData[$i]['id']
    $name = $returnedData[$i+1]['name'];
    $age = $returnedData[$i+2]['age'];
    $stmt->execute();
}


    // Close statement object
    $stmt->close();
}

}

2 个答案:

答案 0 :(得分:2)

表单中的数据会显示在$_POST['id']$_POST['name']$_POST['age']中,但您未在所发布的代码中使用这些变量。

您实际上并未在表单中为id设置值。你隐藏的ipputs看起来应该更像这样:

  <input type="hidden" name="id" value="myID"/>

将返回$_POST['id'] == "myID"

另请注意,您的表单要求提供两组这些变量。除非你以某种方式修改名称,否则你不会看到第一组。

答案 1 :(得分:2)

首先,您需要在表单中使用数组样式名称:

<form action="update.php" method="post">

  <input type="hidden" name="id[]" value=""/>
  <input type="text" name="name[]" value=""/>
  <input type="text" name="age[]" value=""/>

  <input type="hidden" name="id[]" value=""/>
  <input type="text" name="name[]" value=""/>
  <input type="text" name="age[]" value=""/>

  <input type="submit" value="submit" name="submit" />
</form>

我不知道你从哪里得到$_POST['data'],这在你的表单中没有出现。 $_POST的键是表单中输入元素的名称。

最后,如果您在查询中未包含WHERE子句,则会更新表中的每个行。

// Create a prepared statement
if($stmt->prepare("UPDATE contact SET (name, age) VALUES (?, ?) WHERE id = ?")) {

    // Bind your variables to replace the ?s
    $stmt->bind_param('sii', $name, $age, $id);

    for($i=0;$i<count($_POST['id']);$i++){
        $id = $POST['id'][$i]
        $name = $_POST['name'][$i];
        $age = $_POST['age'][$i];
        $stmt->execute();
    }

    // Close statement object
    $stmt->close();
}