Php Çok Boyutlu Dizi / MySQL sorunu

2 Cevap php

Hi My fellow geeks I am trying to write a php script that take a text file break down its contents and and insert it into a MySql database, the code is as follows:

$file = "my_file.txt";

$db = "db_name";

$link = mysql_connect("localhost","root"); 

if(!$link)  die("Connection Failed");    

mysql_select_db($db) or die("Could not open $db: ".mysql_error()."<br />");

$fp = fopen($file, 'r') or die("Could not open file");
$my_filesize = filesize($file);

while(!feof($fp)) {
  $prod_doc.=fread($fp, $my_filesize); // store the file in a variable
} 

$prod_array = explode("~",$prod_doc);   // create a array with the explode function

for($i=0; $i<count($prod_array); $i++){
  $prod_items[$i] = explode(',', $prod_array[$i]);   // create a malti-dimensional array 
}

$query = "INSERT INTO my_table(feild1, feild two, feild three)
          VALUES ('$prod_items[$i][0]','$prod_items[$i][1]','$prod_items[$i][2]')
         ";

$result = mysql_query($query);

if(!$result) die(mysql_error());            

$result = mysql_affected_rows($result);

echo $result;

mysql_close($link); `

Benim sorunum şu: Array [0], Array [1], Array [3] yerine benim veri veritabanına girilir budur. Peşin, alkış teşekkürler.

2 Cevap

Siz de $ prod_items dizi üzerinden yineleme yapmak var, o değerleri concate

$insert = array();
for($i=0; $i<count($prod_array); $i++){
  $prod_items[$i] = explode(',', $prod_array[$i]);   // create a malti-dimensional array
  $insert[] = '( ' .$prod_items[$i][0]. ', '.$prod_items[$i][1]. ', '. $prod_items[$i][3] .')';
}

$insert_string = implode(', ', $insert);

$query = "INSERT INTO my_table(feild1, feild two, feild three)
          VALUES" . $insert_string;

Ve foreach için insted kullanmalısınız.

Çift tırnak dize ihtiyacı içinde kullanılan dizi değişken element değerleri erişmek için sınırlayıcı parantez:

"'{$prod_items[$i][0]}','{$prod_items[$i][1]}','{$prod_items[$i][2]}') ";

Bu kod için başka bir yolu sıralanmasıyla (Eğer ekstra sınırlayıcı gerekmez durumda):

"'" . $prod_items[$i][0] . "','" . $prod_items[$i][1] . "','" . $prod_items[$i][2] . "') ";

Veri girişi öngörülemez ise, sizin netice veya uzlaşma güvenliği ilkelerini kırabilir karakterler filtre gerek, unutmayın. SEE http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php

Ayrıca, junmats yaptığı yorum, sadece dışından sorguyu doğru çalışan bir mantıklı değil döngüsü için.