【问题标题】:Insert into mysql from php an array从php插入一个数组到mysql
【发布时间】:2013-10-27 19:43:13
【问题描述】:

我有以下数组:

$array[0] = "internet";
$array[1] = "renweb";

等等。

我想将该数组插入到表中。我不知道该数组将有多少个位置,因为这是来自用户填写的表单的帖子。如何将它们插入表中?

我正在考虑一个foreach

类似:

foreach($array as $tags){
    $query = sprintf("insert into solution_tags values('%s')", $tags);
    $DBconnect->query($query);
}

这是正确的方法吗?或者有没有更简单、有效、无痛的方法来做到这一点?

任何帮助将不胜感激!

【问题讨论】:

  • 这是一个很好的方法。

标签: php mysql arrays mysqli


【解决方案1】:

您可以将数组保存到文本文件,然后进行批量插入:

$file=.... /* your temp filename */
file_put_contents($file,implode("\n",$array));
$DBconnect->query("LOAD DATA INFILE '$file' INTO TABLE solution_tags");

...当然,前提是 Web 服务器和 DB 服务器共享同一个文件系统!

【讨论】:

    【解决方案2】:

    回答你提出的问题:

    只有在感到疼痛时才寻找无痛方法。你?然后表达出来,让别人明白是什么让你感到不安,让他们为这个问题提供一定的解决方案。如果没有 - 就让它保持原样。效率也是如此。也很容易。无缘无故地改变你的代码,一时兴起,不知从何而来,可能会导致比你想象的当前代码更多的麻烦。

    回答你没有问的问题:

    您的方法以及所有答案都存在一个基本缺陷:您的查询格式不正确。这可能会导致不可预知的后果。要正确格式化查询,您必须使用prepared statements

    $stm = $DBconnect->prepare("insert into solution_tags values(?)");
    $stm->bind_param('s', $tag);
    
    foreach($array as $tag){
        $stm->execute();
    }
    

    再次:这不是“效率”或“轻松”的问题(事实上,在或多或少复杂的查询中,与您当前的方法相比,这种方法将是一种痛苦),而是基本方法的问题您应该关注您的每一个查询。

    附带说明,您可能希望在此表中添加一些字段,以将这些标签链接到其他一些实体。

    【讨论】:

    • 我可能错了,但 bind_param 应该在循环内,对吧?
    【解决方案3】:

    最好的方法是像这样使用 foreach :

    foreach( $myarray as $tags) {
    mysql_query('insert into solution_tags values('$tags')');
    }
    

    【讨论】:

    • 您只是未过滤用户输入。
    • 这与我在查询中所做的几乎相同。
    • @Yisera:您可以安全地删除“几乎”部分。此外,它使用了已弃用的 mysql_ 东西。
    【解决方案4】:

    你可以用一个查询做很多插入:

    $aValues = array();
    foreach($array as $tags) {
        $aValues[] = sprintf('("%s")');
    }
    
    $query = 'INSERT INTO solution_tags VALUES '.implode(',', $aValues);
    $DBconnect->query($query);
    

    我使用了implode,因为它会为你处理逗号。

    【讨论】:

    • 因为这个答案的所有参与者都必须阅读这个问题:stackoverflow.com/questions/60174/…
    • 为什么 PDO 对 DB 来说当然是更好的解决方案,但仍然......让我们假设我们这里有 PDO。你更喜欢制作 12 个$sth->execute() 还是一个?
    • 您的最新评论无关紧要,抱歉。而您的回答仍然是不可接受的质量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2014-06-16
    • 2015-10-11
    • 2014-03-27
    • 2014-08-12
    • 2019-04-14
    • 2012-12-05
    相关资源
    最近更新 更多