【问题标题】:Php insert into sql from arrayphp从数组插入sql
【发布时间】:2015-12-25 12:20:10
【问题描述】:

我有 2 个数组,我想用一个按钮将它们添加到我的 sql 表中。 我不知道在 sql 中使用数组。我阅读了很多页面,但找不到简单的方法。

$name=array("Jack", "John", "Fiona");

$country=array("London", "Greece", "Japan"); 

$entry =' went to school';

Sql表:

**id** **|** **name**  **|**    **entry**            **|**      **country**

**1** Jack **|** Jack went to school   **|** London

**2** John  **|**  John went to school    **|** Greece

**3** Fiona  **|**  Fiona went to school  **|** Japan

我尝试了类似的方法,但没有成功。问候

$sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES ('$name[]','$name[]&$entry','$country[]'");

【问题讨论】:

    标签: php mysql sql arrays insert


    【解决方案1】:
    $name=array("Jack", "John", "Fiona");
    
    $country=array("London", "Greece", "Japan"); 
    
    $entry =' went to school';
    
    $SizeOfName=sizeof($name);
    
    for($i=0;$i<$SizeOfName;$i++)
    {
        $Name=$name[$i];
        $Country=$country[$i];
        $Entry=$Name$entry;
    
        $sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES ('$Name','$Entry','$Country')";
    }
    

    【讨论】:

    • 如果 $country 没有与 $name 相同数量的值会发生什么?
    • sizeof?? for 而不是 foreach?
    • 是的。我也想过这一点。但是,OP 要求只是这样,正如我在@Naruto 先生给出的示例中看到的那样
    【解决方案2】:

    您真的应该升级到PDOmysqli。 mysql API 已经被弃用了一段时间,将在下一版本的 PHP (7) 中删除。

    要回答您的实际问题,第一步应该是使数据合理,即:

    $data = [
        [
            'name'    => 'Jack',
            'country' => 'London',
        ],
        [
            'name'    => 'John',
            'country' => 'Greece',
        ],
        [
            'name'    => 'Fiona',
            'country' => 'Japan',
        ],
    ];
    

    这使得处理和维护数据变得更加容易。

    接下来你只需要遍历单个数组:

    $entry = ' went to school';
    
    foreach ($data as $item) {
        $sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES ('$item[name]','$item[name]$entry','$item[country]'");
    }
    

    但是,这仍然使用旧的 API,并且不能防止 sql 漏洞。你应该做的(在making a database connection proper之后)是:

    $entry = 'went to school';
    
    $stmt = $pdo->prepare('INSERT INTO bilgi (name,entry,country) VALUES (:name, :entry, :country');
    
    foreach ($data as $item) {
        $stmt->execute([
            'name' => $item['name'],
            'entry' => $entry,
            'country' => $item['country'],
        ]);
    }
    

    我还从输入字段中删除了name,因为这是在您的数据库中复制的一种不好的方式。如果名称发生更改,您会被 entry 列中的名称卡住。

    这使用了一个未弃用的 API。防止 SQL 注入漏洞,并且更加健全和可维护。

    【讨论】:

      【解决方案3】:
      <?php
      
      $name=array("Jack", "John", "Fiona");
      
      $country=array("London", "Greece", "Japan"); 
      
      $entry =' went to school';
      
      for($i=0 ; $i<count($name);$i++){
      
          $sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES ('".$name[$i]."','".$name[$i].$entry."','".$country[$i]."'");
      }
      

      【讨论】:

        【解决方案4】:

        您可以在一个 SQL 中插入:

        $name = array("Jack", "John", "Fiona");
        $country = array("London", "Greece", "Japan"); 
        $entry =' went to school';
        
        $values;
        for ($i = 0; $i < count($name); $i++) {
            $values[] = "('$name[$i]', '$name[$i]$entry', '$country[$i]')";
        }
        
        $sql = 'INSERT INTO bilgi (name, entry, country) VALUES ';
        for ($i = 0; $i < count($values); $i++) {
            $sql .= $values[$i];
            if($i < (count($values) - 1)) $sql .= ", ";
        }
        
        $result = mysql_query($sql);
        

        在插入数据库之前,请注意您的数组。 $name 和 $country 的元素数量必须相等。

        【讨论】:

        • 非常感谢。我会注意到他们的。
        【解决方案5】:

        你可以用这个

        for ($i = 0; $i < count($name); $i++) {
           $entryVal = $name[$i].$entry;
           $sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES  ('".$name[$i]."','".$entryVal."','".$country[$i]."'");
        }
        

        【讨论】:

        • 谢谢,我试过了,但它确实像 name:J, name:A, name.J 。只收到第一个字母。我认为 3 个字母代表 3 个数组。
        【解决方案6】:

        这是您问题的动态解决方案:

        <?php
        $name=array("Jack", "John", "Fiona","Mack","Raja","Bohemia");
        $country=array("London", "Greece", "Japan"); 
        $entry ='went to school';
        
        $bigcount = max(count($name),count($country));
        
        for($i=0;$i<$bigcount;$i++)
        {
            $finalValues .= "('$name[$i]','$country[$i]','$entry'),";
        }
        $final = substr($finalValues,0,-1);
        $query = "INSERT INTO bilgi (name,entry,country) VALUES $final";
        $sql = mysql_query($query);
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-08
          • 1970-01-01
          • 2017-10-24
          • 1970-01-01
          • 1970-01-01
          • 2015-01-19
          • 2017-04-21
          相关资源
          最近更新 更多