【问题标题】:PHP prepared statement array updatePHP 准备好的语句数组更新
【发布时间】:2013-07-09 21:06:19
【问题描述】:

这是另一个帖子 (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();
}

}

【问题讨论】:

    标签: php mysqli prepared-statement


    【解决方案1】:

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

    <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();
    }
    

    【讨论】:

    【解决方案2】:

    您表单中的数据将出现在$_POST['id']$_POST['name']$_POST['age'] 中,但您在发布的代码中并未使用这些变量。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      相关资源
      最近更新 更多