consulta dinámica de insertar SQL

hola amigos estoy creando una página php para importar los datos de un archivo csv a la base de datos sql ..

Aquí la tabla de la base de datos y el número de campos son especificados por el usuario en sí.

si el usuario especifica 4 campos, entonces se crea usando un bucle for como se muestra a continuación.

<?php include('connect.php'); $name = $_POST['table_name']; //echo $name; $create_tab = "CREATE TABLE $name(id varchar(15) PRIMARY KEY)"; if(mysql_query($create_tab,$con)) { echo "Table $name created successfully... 

Add columns..."; } else { die('Error1'.mysql_error()); } $field = $_POST['number_of_fields']; //echo $name.$field; echo '
'; echo "

"; echo "

"; echo ''; for ( $i = 1; $i <= $field; $i ++) { echo ''; echo ''; echo ''; echo ''; echo ''; } echo '
'; echo "

$i

"; echo'
'; echo "

"; echo'
'; echo " varchar int float date "; echo '
'; ?>

File Location :


a continuación, cree y modifique la tabla de la siguiente manera …

  <?php include('connect.php'); $field = $_POST[fields]; $name = $_POST[tablename]; for ( $i = 1; $i <= $field; $i++) { //getting field names $varname = ($txtfield . $i); $$varname = $_POST[field.$i]; // echo $$varname; $fi = $$varname; //getting field types $selname = ($selfield . $i); $$selname = $_POST[select.$i]; $dt = $$varname; $sql = "ALTER TABLE $name ADD $fi $dt"; if(mysql_query($sql,$con)) { echo "Field $fi added successfully...
"; } else { die('Error1'.mysql_error()); } } ?>

como la tabla de base de datos y los campos anteriores están embalados …

Obtuve el concepto de insertar datos usando variables estáticas de la siguiente manera ..

 <?php // data import include('connect.php'); $field = $_POST['fileField']; //file directory echo "

Import file path: "; echo $field; $file = $field; $lines = file($file); $firstLine = $lines[0]; foreach ($lines as $line_num => $line) { if($line_num==0) { continue; } //escape the header column $arr = explode(",",$line); $column1= $arr[0]; $column2= $arr[1]; // ' escape character if (strpos($column2, "'") == FALSE) { $column21 = $column2; } else{ $column21 = str_replace ("'", "\'", $column2); } $column3= $arr[2]; $column4= $arr[3]; //print data from csv echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo "
"; echo $column1; echo ""; echo $column21; echo ""; echo $column3; echo ""; echo $column4; echo "
"; $import="INSERT into $name (id,name,year1,year2) values( '$column1','$column21','$column3','$column4')"; mysql_query($import) or die(mysql_error()); } ?>

ahora, mi pregunta es ¿cómo puedo hacer que esta statement de inserción sea dinámica, ya que crea nombres de campo y valores dinámicamente dentro de la consulta de inserción a partir de los datos obtenidos de for loop en table create y alter query?

Si entiendo tu pregunta correctamente, parece que quieres combinar tus insertos en una sola consulta (que es muy inteligente en cuanto a rendimiento). SQL le permite insertar varias filas a la vez como sigue:

 INSERT INTO table (id, first, last) VALUES(NULL, 'Ryan', 'Silvers'),(NULL, 'Oscar', 'Smith'),(NULL, 'Jessica', 'Owens') 

Entonces, al usar la creación de una matriz de VALORES y al usar implosión para unirlos, puede hacer una consulta:

 //Create rows foreach($rows as $row) { $queryRows[] = "(NULL, '".$row['first']."', '".$row['last']."')"; } //Create query $query = 'INSERT INTO table (id, first, last) VALUES'.implode(',', $queryRows); 

Ahora que entiendo su pregunta real, puedo darle una visión general básica de lo que debe hacer para lograr esto. Debe crear un formulario que permita a un usuario ingresar datos que se insertarán en la tabla.

 

Luego, debe escribir un script PHP para procesar el envío del formulario e insertar los datos en MySQL:

 prepare('INSERT INTO table (field1) VALUES(:field1)'); $stmt->execute(array(':field1', $_POST['field1'])); ?> 

Luego, debe escribir un script PHP para procesar el envío del formulario e insertar los datos en MySQL:

inserción de función ($ tableta, $ datad) {

  if(empty($tablet)) { return false; } if(empty($this->CONN)){ return false; } $conn = $this->CONN; $query1 = "select * from user"; $result1 = mysql_query($query1); $numcolumn = mysql_num_fields($result1); $addd = ""; $count = 0; for ( $i = 1; $i < $numcolumn; $i++ ) { $columnnames = mysql_field_name($result1, $i); if(($numcolumn-1) == $i) { $addd .= $columnnames; $data .= "'".$datad[$count]."'"; } else { $addd .= $columnnames.","; $data .= "'".$datad[$count]."',"; } $count++; } $ins = "INSERT INTO ".$tablet."(".$addd.")"."VALUES(".$data.")"; mysql_query($ins); header('Location: index.php'); exit; }