【问题标题】:Insert Multiple rows of mysql using php使用php插入多行mysql
【发布时间】:2014-02-25 23:58:41
【问题描述】:

如何使用 php 将多个数据插入 mysql 数据库。我尝试使用 for 循环,但没有运气。

//array of input boxes
$id1=array($aa1,$aa2,$aa3,$aa4,$aa5,$aa6,$aa7);
$timeRank1=array($a3,$a6,$a9,$a12,$a15,$a18,$a21);
for ($i = 0; $i < 7; $i++) {
require_once("connection.php");
$a = $id1[$i];
$b = $timeRank1[$i];
$sql = "INSERT INTO results (id,swim_rank)
VALUES ('".$a."','".$b."')";

【问题讨论】:

  • 只有一个查询,你在哪里执行呢?使用 mysqli 或 pdo
  • 这应该可以帮助你。只需根据需要修改 SQL 并绑定参数是一个好主意。 phpeveryday.com/articles/…
  • 我有多个输入框,例如 1st Name Time 2nd Name TIme 3rd Name Time,我想在单击提交按钮时将此数据插入 mysql。

标签: php mysql sql arrays loops


【解决方案1】:

只需在循环中构建您的查询,然后在循环完成时执行它

require_once("connection.php");
$sql = "INSERT INTO results (id,swim_rank) VALUES ";
for ($i = 0; $i < 7; $i++) {
    $sql .= "('".$id1[$i]."','".$timeRank1[$i]."'),";
}
$sql = rtrim($sql, ',');
// run your query here

您还会注意到我将您的数据库连接包含在循环之外。无需重复调用。

另外,请确保您对插入的这些值进行转义或使用参数化查询进行插入以防止 SQL 注入。

【讨论】:

  • 它可以插入尽可能多的行,只要您的数据库和 php 内存允许。这将远远超过 7。
  • 我应该在 rtrim($sql,','); 下运行什么查询将此数据插入数据库。我只是 php 的新手。我尝试了您的代码,但没有插入任何内容。
  • 我不能肯定地说,因为我不知道您使用的是什么 API,但它可能是 mysql_query()。
  • 如果您的数据库连接被分配给一个变量并且是mysqli_* 并使用$con 例如,然后在rtrim($sql, ','); @user3157712 之后添加$result = mysqli_query($con, $sql); if ( false===$sql ) { printf("error: %s\n", mysqli_error($con)); } 告诉我们您的数据库连接代码是什么,减去实际凭据,对每个变量使用xxx,并将其作为编辑而不是评论放在您的问题中。
  • 我有语法错误。我发现字符串 $sql 末尾的逗号没有被删除。
【解决方案2】:

想超越约翰,也不想获得积分)

详细说明John Conde's answer:(这里更容易以视觉表示形式显示,而不是进一步的 cmets),正如约翰所说 “我不能肯定地说,因为我不知道什么 API你正在使用...”

假设connection.php 包含以下内容:

<?php
$DB_HOST = "xxx";
$DB_NAME = "xxx";
$DB_USER = "xxx";
$DB_PASS = "xxx";
$con = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($con->connect_errno > 0) {
  die('Connection failed [' . $con->connect_error . ']');
}

查询:

<?php
require_once("connection.php");
$sql = "INSERT INTO results (id,swim_rank) VALUES ";
for ($i = 0; $i < 7; $i++) {
    $sql .= "('".$id1[$i]."','".$timeRank1[$i]."'),";
}
rtrim($sql, ',');
// run your query here

$result = mysqli_query($con, $sql); 
if ( false===$sql ) { 
printf("error: %s\n", mysqli_error($con)); 
}

【讨论】:

  • 字符串最后的逗号不会被删除。它在“;”附近的 mysql 语法中给了我一个错误
  • 您在约翰的回答下写道,您已经弄清楚了。 @user3157712 我认为它现在对你有用吗?
  • no..我知道为什么我有一个错误只是因为字符串末尾的逗号没有被删除。我不知道如何解决它。我尝试使用 substr($sql,0,-1) 但给出了相同的结果。
  • 是使用for循环更新数据库中的多行与您上面写的结构相同吗?
  • 是的,我只添加了一个数据库连接示例。 John 不知道您使用的是什么类型的连接。 @DexterAnthony
【解决方案3】:

根据 mysql 参考指南,这里是如何使用单个插入语句插入多个值。

插入人(姓名、年龄) VALUES('William',25),('Bart',15),('Mary',12);

即假设我们有一个名为 people 的表,其中包含列 name 和 age。

现在,要将其转换为 PHP,一个好的方法是创建一个查询字符串。以下 php 代码创建这样的字符串。

   $query_values = " INSERT INTO results (id,swim_rank) VALUES "; // notice space after VALUES

 if (count($id1) == count($timeRank1)) // ensure both arrays have equal number of elements
 {
    for ($i = 0; $i <= (count($id1) - 1); $i++) // remember array index starts from
    {
        $query_values .= "({$id1[$i]},{$timeRank1[$i]})"  ;
        if ($i != (count($id1) - 1)) // you dont want a trailing comma after your last bracket
        {
            $query_values .= ",";
        }
    }
  }

现在应该使用生成的查询将您的值输入到数据库中。我希望你觉得这很有帮助。任何其他问题都让我知道。干杯

【讨论】:

    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2010-12-21
    相关资源
    最近更新 更多