I am trying to write a function that will insert data into a MySQL table like this:
for ($i = 0; $i < $num; $i++){
if ($header[$i] == $user_table_property->name) {
$import = "
INSERT into testing (
$header[$i]
) values (
'$data[$i]'
)";
}
}
If I have something like this, it will just insert first data into first column, can I know what should I change or add? I Googled some examples and edited it myself, but it's still not working.
Here is the longer part of the codes.
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";
I can tell you that you're not interpolating the array values properly:
$import = "
INSERT into testing (
{$header[$i]}
) values (
'{$data[$i]}'
)";
When they're array values, you have to use {}
around the variable and index (or indices) for it to expand the variable value.
Also, it should probably be doing something like this:
$value = mysql_real_escape_string($data[$i]);
$import = "
INSERT into testing (
`{$header[$i]}`
) values (
'$value'
)";
You don't have any mysql_query()
or whatnot in the if
statement, so it's not apparent the code is going to work (you can't run $import
after the for
loop or it will only have the last $import
set).
The whole technique you're using here doesn't seem correct anyway; you probably actually want to build the column and value lists, then after the for
loop, implode()
them into a string for $import
.
Try
"INSERT INTO `testing` ( `$header[$i]` )
VALUES
('$data[$i]');"
Also, it's not very recommended to write it this way. You better write it like:
"INSERT INTO testing( `" . $header[$i] . "` )
VALUES
('" . $data[$i] . "');"
let's say you have,
$headers = array(..);
$data = array();
try this
$sql = "insert into table_name(".implode(",",$headers).") values(".implode(",",$data).")";
Surely data should be escaped and order of headers should match order of data.