Я пытаюсь написать php script, в котором текстовый файл разбивает его содержимое и вставляет его в базу данных MySql, код выглядит следующим образом:
$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); `
Моя проблема заключается в следующем: Array [0], Array [1], Array [3] - это то, что вводится в базу данных вместо моих данных. Спасибо заранее, приветствую.
Вам нужно также перебрать ваш массив $prod_items, затем укрепите значения
$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;
И вы должны использовать foreach insted of for.
Чтобы получить доступ к значениям элементов массива массивов, используемых внутри строки с двойной кавычкой, необходимо скопировать разделители:
"'{$prod_items[$i][0]}','{$prod_items[$i][1]}','{$prod_items[$i][2]}') ";
Другим способом кодирования этого является конкатенация (в этом случае вам не нужны дополнительные разделители):
"'" . $prod_items[$i][0] . "','" . $prod_items[$i][1] . "','" . $prod_items[$i][2] . "') ";
Не забывайте, что если входные данные непредсказуемы, вам необходимо отфильтровать символы, которые могут нарушить ваш сиквел или поставить под угрозу принципы безопасности. SEE Как я могу предотвратить SQL-инъекцию в PHP?
Кроме того, комментарий junmats правильный, вы выполняете запрос за пределами цикла for, что не имеет смысла.
Для этого вы должны использовать стандартную технику конкатенации (.). PHP может оценивать только простые переменные внутри строки:
"$ var" → var оценивается "$ var- > var" → не оценивается "$ var [0]" → не оценивается
$query = "INSERT INTO my_table(feild1, feild two, feild three)
VALUES ('".$prod_items[$i][0]."','".$prod_items[$i][1]."','".$prod_items[$i][2]".')
";
{...}
. Это дело вкуса, но я предпочитаю это бесконечной последовательности кавычек, двойных кавычек и точек.
Похоже, вы пропустили какой-то код. После взрыва у вас будет массив строк, а не 2d-массив. Также лучше немного обновить код.
$query = "INSERT INTO my_table(feild1, feild_two, feild_three) VALUES ('".$prod_items[$i][0]."','".$prod_items[$i][1]."','".$prod_items[$i][2]."') ";