【问题标题】:How to insert all array data into mysql?如何将所有数组数据插入mysql?
【发布时间】:2014-06-30 06:08:22
【问题描述】:

如何将所有数组数据插入mysql?

我想将所有数组字符串插入到 mysql 中,我可以这样做吗?

<?PHP
include("connect.php");
for ($i = 0; $i < 10; $i++) 
    {
        $myArray[$i] = $i;
    }
$sql = "INSERT INTO table
( all_array , user )
VALUES
('array($myArray)' , '11');";
$dbQuery = mysql_query($sql);
?>

【问题讨论】:

  • all_array 的类型是什么?
  • 你想要的结果是什么?所有值都在不同的行中,或以某种方式在同一行中,还是...?
  • 你不能在mysql中存储数组。
  • Joachim Isaksson - 所有字符串数组,如"1","2","3","4"
  • @user3769723 如果您稍后要对该数组进行搜索,那么在存储这样的数组时会遇到问题。在这种情况下,您最好规范化数据库并将每个值放在单独的行中。

标签: php mysql sql arrays


【解决方案1】:

您可以将所有数组保存为 json 类型。但是你不应该使用 mysql_* 函数,使用 PDO。

例如:

<?PHP
include("connect.php");
for ($i = 0; $i < 10; $i++) 
    {
        $myArray[$i] = $i;
    }

$json_array = json_encode($myArray);
$sql = "INSERT INTO table
( all_array , user )
VALUES
('$json_array' , '11');";
$dbQuery = mysql_query($sql);
?>

【讨论】:

  • 你确定你可以将 json 数组存储在 mysql 数据库中(我猜你可以作为文本、长文本、二进制或 blob)但是你为什么要呢?为什么不在此时将其写入 json 文件,这显然是一个更好的选择。它将更快地从磁盘中获取,更重要的是不会浪费数据库处理能力和查询缓存。在 mysql 中存储任何类型的数组对我来说似乎是个坏主意。
  • 好的,如果我想再次将此数据[0,1,2,3,4,5,6,7,8,9] 转换为数组,我该怎么办?
  • @r3wt 您需要将数组存储在数据库中数十万次。所以最好的选择是通过 json 或序列化后存储它们。它有什么坏主意?
  • @user3769723 您可以通过 json_decode($json_array,TRUE); 转换为数组;
  • @r3wt 是的,正如您所说,RDBMS 使我们的生活比写入数百个文件更容易。亲爱的,如果您有大型数组,那么编写文件也将花费。您正在执行两个步骤,1 将文件写入一个 IO 操作,2,将文件名存储在数据库中另一个 IO 操作。当你需要提取时也是如此。为什么你不选择在这两种情况下都采取一步?
【解决方案2】:

您可以使用 PHP 的 implode 函数将数组元素与字符串连接起来。

$arrayAsAString = implode(",", $myArray);

注意:我刚刚看到@onuri 的回答。所以考虑这是一个替代方案。

CAVEAT:无论您选择哪种方法,执行数据库查询都会很困难。

【讨论】:

    【解决方案3】:

    使用 php implode 函数,它会将数组中的所有元素分解为逗号分隔的字符串。如下更改您的代码。

    <?PHP
    include("connect.php");
    for ($i = 0; $i < 10; $i++) 
        {
            $myArray[$i] = $i;
        }
    $arrayString= implode(", ", $myArray);
    $sql = "INSERT INTO table
    ( all_array , user )
    VALUES
    ('$arrayString' , '11');";
    $dbQuery = mysql_query($sql);
    ?>
    

    Check out this link for details

    【讨论】:

    • 不应该是$json_array = implode(", ", $myArray);吗?
    • @Thauwa 是什么让你认为 implode 返回一个有效的 json 字符串或与 json 有什么关系?
    • 嗯...我从没想过。我也没有这样声称。你指的是我使用的变量名吗?我引用了给出的答案。
    【解决方案4】:

    我会用 json 做到这一点

    <?PHP
        include("connect.php");
        for ($i = 0; $i < 10; $i++) 
        {
            $myArray[$i] = $i;
        }
    
        $myJSON = json_encode($myArray);
    
        $sql = "INSERT INTO table ( all_array , user ) VALUES ('$myJSON' , '11');";
        $dbQuery = mysql_query($sql);
    ?>
    

    这会将数组作为可以存储在 db 中的 JSON 字符串返回。如果我稍后选择它,我可以轻松地将 JSON-String 转换回一个数组,如果需要的话:

    $myArray = json_decode($myJSONString);
    

    【讨论】:

    • ups,我之前应该阅读其他帖子......有人有相同的答案。 :)
    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2014-04-26
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多