【问题标题】:Building MySQL insert statement from multidimensional array从多维数组构建 MySQL 插入语句
【发布时间】:2014-02-09 04:24:12
【问题描述】:

我需要从一个数组构建 INSERT 语句,但我被困住了,这是我目前所拥有的,但它显然是不正确的:

INSERT INTO company (, Name, Address, City, State, Zip, Country, Website, NOL
INSERT INTO additionallocations (, CompanyID, Address, City, State, Zip, Country

这是我的数组以及我如何构建语句:

$fieldsArray = array(
                    'company' => array(
                            'Name' => $Name,
                            'Address' => $Address,
                            'City' => $City,
                            'State' => $State,
                            'Zip' => $Zip,
                            'Country' => $Country,
                            'Website' => $Website,
                            'NOL' => $NOL,
                        ),
                    'additionallocations' => array(
                            'CompanyID' => $CompanyID,
                            'Address' => $Address,
                            'City' => $City,
                            'State' => $State,
                            'Zip' => $Zip,
                            'Country' => $Country,
                        )
                    );




        foreach($fieldsArray as $table => $rows) {
            $sql = "INSERT INTO " . $table . " (";
            foreach($rows as $column => $value){
                $sql .= ", " .$column;
            }
        }

        echo $sql;

这是我想要的结果:

INSERT INTO company (Name, Address, City, State, Zip, Country, Website, NOL) VALUES
                             ('$Name', '$Address', '$City', '$State', '$Zip', '$Country', '$Website', '$NOL');

我需要找到一种方法来继续使用 VALUES 构建它,并去掉左括号后的第一个逗号。有人有什么建议吗?

【问题讨论】:

  • 你说你需要这个值,你的值将如何传递?
  • 什么意思?我想在 VALUES 部分中使用变量名称,例如 INSERT INTO company (Name, Address, City, State, Zip, Country, Website, NOL) VALUES ('$Name', '$Address', '$City', '$State', '$Zip', '$Country', '$Website', '$NOL');

标签: php mysql arrays multidimensional-array


【解决方案1】:
foreach($fieldsArray as $table => $rows) 
{
    $sql = "INSERT INTO " . $table . "(";
    foreach($rows as $column => $value)
    {    
         $sql .= $column.", ";
    }
    $sql = rtrim($sql, ", ");
    $sql .= ") VALUES (";

    foreach($rows as $column => $value)
    {    
         $sql .= "'".$value."', ";
    }
    $sql = rtrim($sql, ", ");
    $sql .= ")";
    echo $sql; 
}

【讨论】:

  • rtrim($sql, ", "); 应该是$sql = rtrim($sql, ", ");
【解决方案2】:

我得到了它的工作:

foreach($fieldsArray as $key => $table){            
    $keys = array_keys($table);
        $values = null;
        $x = 1;

        foreach($keys as $value) {
            $values .= "?";
            if($x < count($keys)) {
                $values .= ', ';
            }
            $x++;
        }

    echo $sql = "INSERT INTO {$key} (`" . implode('`, `', $keys) . "`) VALUES ({$values})" . "<br/>";

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2018-01-03
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2011-12-12
    相关资源
    最近更新 更多