0

我制作了一个表格,它需要大约 11 人的出勤率,我需要在数据库中插入每日出勤率。我想使用一个查询一次插入所有员工的出勤率,而不是为每个员工编写 11 个不同的查询。我的表结构是这样的:出勤(日期,开斋节,姓名,出勤) 我为批量插入尝试了以下代码,但它没有用。有什么建议么??

<?php
    $dbhost = "localhost";
    $dbuser = "root";
    $dbname = "gail";

    $conn = mysql_connect($dbhost, $dbuser,"") or die ('Error connecting to mysql');
    mysql_select_db($dbname);
    $dbh->beginTransaction();

    $stmt = $dbh->prepare("INSERT INTO attendance VALUES (curdate(),'$_POST[eid]','$_POST[ename]','$_POST[pora]')");

    foreach($valuesToInsert as $insertRow)
    {   

        // now loop through each inner array to match binded values
        foreach($insertRow as $column => value)
        {
            $stmt->bindParam(":{$column}", value);
            $stmt->execute();
        }
    }


    $dbh->commit();
?>

我也试过这个:

<?php

    $dbhost = "localhost";
    $dbuser = "root";
    $dbname = "gail";

    $conn = mysql_connect($dbhost, $dbuser,"") or die ('Error connecting to mysql');
    mysql_select_db($dbname);

    $employees=array();

    while($row=mysql_fetch_assoc($result))
    {
        $employees[$row["eid"]]=array("ename"=>$row["ename"]);
        $employees[$row["eid"]][$row["dated"]]=array();
        $employees[$row["eid"]][$row["dated"]][$row["ename"]]=$row["pora"];
        $inserts = array();
        foreach($employees as $v)
        {
            $inserts[] = "(curdate(),'$_POST[eid]','$POST[ename]','$POST[pora]')";

            $query = "INSERT INTO attendance VALUES ". implode(", ", $inserts);

            echo "query = $query"; // for debugging purposes, remove this once it is working
            mysql_query($query) or die(mysql_error());
        }
    }


?>

但这所做的只是在表中多次插入当前日期。请帮忙。提前谢谢:)

我又做了一件事。它在数据库中插入多行,正是你想要的行数,但都是空白的。关于如何处理的任何想法?

.html 文件:

光束线 ID 流

光束线 ID

光束线 ID 流

光束线 ID 流

光束线 ID 流

php:

 <?php
    $dbhost = "localhost";
    $dbuser = "root";
    $dbname = "gail";

    $conn = mysql_connect($dbhost, $dbuser,"") or die ('Error connecting to mysql');
    mysql_select_db($dbname);

    $cnt = count($_POST['bline_id']);
    $cnt2 = count($_POST['flow']);

    if ($cnt > 0 && $cnt == $cnt2) {
        $insertArr = array();
        for ($i=0; $i<$cnt; $i++) {
            $insertArr[] = "('" . mysql_real_escape_string($_POST['bline_id'][$i]) . "', '" .        mysql_real_escape_string($_POST['flow'][$i]) . "')";
        }

        $query = "INSERT INTO bltest (bline_id, flow) VALUES " . implode(", ", $insertArr);
        mysql_query($query) or trigger_error("Insert failed: " . mysql_error());
    }

    echo("<pre>\n");  
    print_r($_POST);
    echo("</pre>\n");
    mysql_close($conn); 
?> 
4

3 回答 3

0

终于明白了!如果有人需要从只有一个 cide 块的表单中插入多个值,follow 应该会有所帮助!欢呼::)

<?php

$dbhost = "localhost";
$dbuser = "root";
$dbname = "gail";

$conn = mysql_connect($dbhost, $dbuser,"") or die ('Error connecting to mysql');
mysql_select_db($dbname);

$cnt = count($_POST['eid']);
$cnt2 = count($_POST['ename']);
$cnt3 = count($_POST['pora']);

if ($cnt2 > 0 ) {
$insertArr = array();
for ($i=0; $i<$cnt2; $i++) {
    $insertArr[] = "(curdate(),'" . mysql_real_escape_string($_POST['eid'][$i]) . " ','" . mysql_real_escape_string($_POST['ename'][$i]) . " ','" .   mysql_real_escape_string($_POST['pora'][$i]) . "')";
      }

 $query = "INSERT INTO attendance (dated,eid,ename,pora) VALUES " . implode(", ",     $insertArr);
 mysql_query($query) or trigger_error("Insert failed: " . mysql_error());
 }

echo("<pre>\n");
print_r($_POST);
echo("</pre>\n");

mysql_close($conn);
?>
于 2013-07-11T13:33:27.263 回答
-1

您的foreach()循环走在正确的轨道上。主要有两点需要改变。由于我们要构建单个查询(而不是针对每个员工的查询,因此在循环之前启动查询:

$query = "INSERT INTO `attendance` (`field1`, `field2`, `field3`) VALUES ";
foreach ($employees as $v)

接下来,在循环的每次迭代中将特定于员工的字段添加到查询中。请注意,您需要转义您的输入以避免 MySQL 注入。mysql_real_escape_string()是一种方法,但您应该考虑实施更强大的解决方案,也许通过 PDO 参数化查询。

foreach($employees as $v)
{
    $inserts[] = "(curdate(), '"
        . mysql_real_escape_string($_POST['eid'])
        . "', '" . mysql_real_escape_string($_POST['ename'])
        . "', '" . mysql_real_escape_string($_POST['pora']) . "')";
}

然后将单个插入添加到查询中:

$query .= implode(",", $inserts);

这将产生以下格式的查询:

INSERT INTO `attendance` (`field1`, `field2`, `field3`) VALUES 
    (curdate(), 'id1', 'ename1', 'pora1'),
    (curdate(), 'id2', 'ename2', 'pora2'),
    (curdate(), 'id3', 'ename3', 'pora3')

最后,关于您是从数据库查询中提取数据$_POST还是从数据库查询中提取数据,您的代码中存在一些混淆。如果数据来自查询,请将对数据的引用替换为$_POST数据的正确位置。

于 2013-07-10T15:51:03.907 回答
-2

最近,我设法为开始使用 PHP 学习动态 SQL 查询的每个人创建了一个清单。您需要先完成每一项,然后再转到正文:

  1. 首先,必须设计一个数据库来存储您的数据。
  2. 完成后,您需要考虑什么查询将用于插入目的。
  3. 然后手动编写此查询并确保它在控制台中工作
  4. 下一步是确定此查询需要哪些数据
  5. 那么您必须验证您拥有的数据并确定它是否适合 (4)
  6. 如果不是 - 您需要格式化现有数据以使其满足 (4) 中的要求
  7. 一旦你有了它,你就可以开始编写一个 PHP 程序来动态地创建你的查询,使用字符串连接,并回显结果。
  8. 那么您必须在控制台中测试这个动态构建的查询,就像在 (3) 中一样
  9. 如果可行 - 用占位符替换查询中的变量,并使用 mysqli 准备好的语句继续运行此查询,并使用一组数据。请注意,当使用本机预准备语句时,占位符只能表示单个数据文字。
  10. 完成后,您终于可以开始研究为准备好的语句提供多个值的问题了。
于 2013-07-10T15:29:03.100 回答