将数组值插入表列

时间:2011-10-29 21:35:35

标签: php arrays

我正在尝试编写一个将数据插入MySQL表的函数,如下所示:

for ($i = 0; $i < $num; $i++){
    if ($header[$i] == $user_table_property->name) {
        $import = "
INSERT into testing (
    $header[$i]
) values (
    '$data[$i]'
)";
    }
}

如果我有这样的东西,它只会将第一个数据插入第一列,我可以知道应该更改或添加什么吗?我用Google搜索了一些示例并自行编辑,但它仍无效。

以下是代码的较长部分。

if (isset($_POST['submit'])) {

if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
    echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "<br></h1>";
    echo "<h2>Displaying contents:</h2>";
    readfile($_FILES['filename']['tmp_name']);
    echo "<br>";
    echo $headers;
}


$handle = fopen($_FILES['filename']['tmp_name'], "r");

    $header = fgetcsv($handle);


    while(! feof($handle)){


while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

                $num = count($data);

               mysql_select_db("EMC", $db);

               $sql = "SELECT * from CSVtest";
               $result = mysql_query($sql,$db);

                   while ($user_table_property = mysql_fetch_field($result)) 
                            {

                  for($i=0; $i<$num; $i++){

                                  if($header[$i] == $user_table_property->name )
                                               {

                                               $import = "insert into CSVtest ( `" . $header[$i] . "`) values ('" . $data[$i] . "')";

                                               }

                                           }

                              mysql_query($import) or die(mysql_error()) ; 
                            }

                                                       } 
               }

fclose($handle);

print "Import done";

3 个答案:

答案 0 :(得分:3)

让我们说你有,

$headers = array(..);
$data = array();

试试这个

$sql = "insert into table_name(".implode(",",$headers).") values(".implode(",",$data).")";

当然应该对数据进行转义,并且标题的顺序应与数据顺序匹配。

答案 1 :(得分:1)

尝试

"INSERT INTO `testing` ( `$header[$i]` ) 
           VALUES
            ('$data[$i]');"

此外,不建议以这种方式编写它。你最好把它写成:

"INSERT INTO testing( `" . $header[$i] . "` ) 
           VALUES
            ('" . $data[$i] . "');"

答案 2 :(得分:1)

我可以告诉你,你没有正确地插入数组值:

$import = "
INSERT into testing (
    {$header[$i]}
) values (
    '{$data[$i]}'
)";

当它们是数组值时,您必须在变量和索引(或索引)周围使用{}来扩展变量值。

此外,它可能应该做这样的事情:

$value = mysql_real_escape_string($data[$i]);
$import = "
INSERT into testing (
    `{$header[$i]}`
) values (
    '$value'
)";

mysql_query()语句中没有任何if或其他内容,因此代码无法正常工作($import之后for无法运行$import 1}}循环或它只会设置最后for

你在这里使用的整个技术无论如何似乎都不正确;您可能实际上想要构建列和值列表,然后在implode()循环后$import将它们转换为{{1}}的字符串。