Проблема многомерного массива Php / MySql

0

Я пытаюсь написать 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] - это то, что вводится в базу данных вместо моих данных. Спасибо заранее, приветствую.

  • 1
    Небольшая подсказка, может быть, это поможет: $ i в вашем запросе уже неоднозначно, потому что ваш запрос не находится внутри цикла.
Теги:

4 ответа

1
Лучший ответ

Вам нужно также перебрать ваш массив $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.

2

Чтобы получить доступ к значениям элементов массива массивов, используемых внутри строки с двойной кавычкой, необходимо скопировать разделители:

"'{$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, что не имеет смысла.

0

Для этого вы должны использовать стандартную технику конкатенации (.). 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]".')
       ";
  • 0
    PHP может интерполировать любые переменные внутри строки, просто заключив их в {...} . Это дело вкуса, но я предпочитаю это бесконечной последовательности кавычек, двойных кавычек и точек.
0

Похоже, вы пропустили какой-то код. После взрыва у вас будет массив строк, а не 2d-массив. Также лучше немного обновить код.

$query = "INSERT INTO my_table(feild1, feild_two, feild_three) VALUES ('".$prod_items[$i][0]."','".$prod_items[$i][1]."','".$prod_items[$i][2]."') ";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню