PHP从多维数组中准备了insert语句

时间:2013-07-08 21:06:57

标签: php mysql prepared-statement

更新代码:

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

/* Create a prepared statement */

$query = "INSERT INTO log_dates(week_date, crew_chief, monday_crew) values(?,?,?)";

$stmt = mysqli_prepare($connection, $query);


  $returnedData = $_POST['data'];

  foreach($returnedData as $data) {
    $week_date = $data['week_date'];
    $crew_chief = $data['crew_chief'];
    $monday_crew = $data['monday_crew'];
    $stmt->execute();
  }


 mysqli_stmt_bind_param($stmt, 'sss', $week_date, $crew_chief, $monday_crew);

/* Execute it */
 mysqli_stmt_execute($stmt);


/* Close statement */
 mysqli_stmt_close($stmt);

 } // end if

这是我的POST阵列的样子:

Array ( [0] => Array ( [week_date] => 2013-07-08 - 2013-07-14 ) [1] => Array ( [crew_chief] => Alan ) [2] => Array ( [monday_crew] => dd ) )

2 个答案:

答案 0 :(得分:4)

这不是你如何绑定参数。您将多个参数打到SINGLE值。绑定调用应该是

mysqli_stmt_bind_param($stmt, 'ss', $foo, $bar);
                               ^^--two params
                                    ^^^^^^^^^^---two values


foreach($returnedData as $data) {
   $bar = $data['crew_chief'];
   $foo = $data['week_date'];
   $stmt->execute();
}

一旦变量被绑定,只需为它们分配新值将导致语句上的下一个 - > execute()调用获取这些新值。

答案 1 :(得分:1)

我有个你的想法。你需要知道你在做什么。

首先,您需要开发一个要针对SQL Server运行的纯SQL查询。没有预备语句,没有mysqli,没有PHP。一个干净的SQL。

SQL现在是您的问题,而不是将其发送到服务器的API。最后,一步一步,进一步开发您需要的程序。这是一份粗略的清单:

  1. 首先,必须设计一个数据库来存储您的数据。
  2. 完成后,您需要考虑哪些查询可用于插入目的。
  3. 然后手动编写此查询并确保它在控制台中运行
  4. 下一步是确定此查询所需的数据
  5. 然后您必须验证您拥有的数据并确定它是否适合(4)
  6. 如果不是 - 您需要格式化现有数据,使其符合(4)
  7. 的要求
  8. 一旦你拥有它,你就可以开始编写一个PHP程序,它使用字符串连接动态创建你的查询,然后回显结果。
  9. 然后你必须在控制台中测试这个动态构建的查询,就像在(3)
  10. 中一样
  11. 如果有效 - 用占位符替换查询中的变量,并使用mysqli预处理语句继续运行此查询,并使用一组数据。请注意,使用本机预准备语句时,占位符只能表示单个数据文字。
  12. 完成它后,你可能最终开始研究一个有多个值的预备语句的问题。
  13. 您可以从上面的任何阶段寻求帮助,但必须遵循该列表。因为看起来你要求最后一项没有完成第一项。

    希望它有所帮助。