我正在尝试编写一个将数据插入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";
答案 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}}的字符串。