Хранение массивов в базе данных

1

Хорошо, я пытаюсь прочитать файл csv, который загружает пользователь. Он будет иметь один столбец и много строк. Каждая строка будет содержать URL-адрес. Я загрузил его и отсортировал данные, но не могу понять, как правильно извлечь эти данные и сохранить их в базе данных.

РЕДАКТИРОВАТЬ

Когда я делаю var_dump($csv) я получаю следующее:

array (size=5)
  0 => 
    array (size=1)
      0 => string 'http://example.com' (length=18)
  1 => 
    array (size=1)
      0 => string 'http://example2.com' (length=19)
  2 => 
    array (size=1)
      0 => string 'http://example3.com' (length=19)
  3 => 
    array (size=1)
      0 => string 'http://example4.com' (length=19)
  4 => boolean false

Как сохранить каждый из этих URL в качестве новой записи в таблице?

EDIT # 2

При использовании этого кода:

   foreach($csv as $v) {
      if($con->query("INSERT INTO table_name (url) VALUES('$v')")) {
      }
      else{
        // connection failure
      }
    }

Я получаю следующую ошибку:

Примечание. Преобразование массива в строку в

Это относится к моему примеру if выше. Я получаю 4 уведомления (которые он должен хранить 4 записи с файлом, с которым я работаю, чтобы это имело смысл)

Он также сохраняет 5 записей в базе данных. Первые 4 имеют "Array" в столбце url, а последний - полностью пустой.

  • 0
    Зачем тебе это сортировать? База данных не волнует, в каком порядке вы их вставляете.
  • 0
    Может быть, сортировка была неправильным словом. Мне просто нужно хранить его в любом порядке.
Показать ещё 2 комментария
Теги:

4 ответа

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

Используя mysqli, сначала создайте безопасную страницу, например:

connect.php

<?php  // change the Strings in quotes below
function db(){
  return new mysqli('host', 'username', 'password', 'database');
}
?>

othepage.php

<?php
include 'connect.php'; $db = db(); $csv = readCSV($csvFile);
foreach($csv as $a){
  foreach($a as $v){
    if($db->query("INSERT 'url_table_name' ('url_column_name') VALUES('$v')"){
    }
    else{
      // connection failure
    }
  }
}
$db->close();
?>
  • 0
    Ошибка преобразования массива в строку. В базе данных хранится 5 записей. Первые четыре все говорят «Массив» в поле URL-адреса, а 5-е пустое.
  • 0
    Я исправил свой вопрос, используя ваш код и полученную ошибку.
Показать ещё 2 комментария
1

Предполагая, что вы используете PDO (он похож на mysqli, но вы используете bind_param вместо bindParam):

$stmt = $pdo->prepare("INSERT INTO tableName (url) VALUES (:url)");
$stmt->bindParam(':url', $url);
foreach ($csv as $row) {
    $url = $row[0];
    $stmt->execute();
}

Я предполагаю, что id - это поле с автоматическим приращением, поэтому его исключение из INSERT автоматически назначит.

0

Если вам нужен массив без изменений, не сортируя его по массиву и сохраняя каждый элемент в базе данных в собственной строке. Лучшим решением будет:

$Array = array(
    0 => array ("http://www.example.com"),
    1 => array ("http://www.example2.com"),
    2 => array ("http://www.example3.com")  
);

echo serialize($Array);

Что будет выводить:

a: 3: {i: 0; a: 1: {i: 0; s: 22: " http://www.example.com ";} i: 1; a: 1: {i: 0; s: 23: " http://www.example2.com ";} i: 2; a: 1: {i: 0; s: 23: " http://www.example3.com ";}}

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

 $Unser = unserialize($unserializedArray);

так работает:

$Array = array(
    0 => array ("http://www.example.com"),
    1 => array ("http://www.example2.com"),
    2 => array ("http://www.example3.com")  
);

$Ser = serialize($Array);

print_r(unserialize($Ser));

выведет:

Массив ([0] => Массив ([0] => http://www.example.com) [1] => Массив ([0] => http://www.example2.com) [2] => Массив ([0] => http://www.example3.com))

0

Используйте команду for(); и foreach(); цикл, чтобы перебрать массивы и получить данные. Затем в цикле запросите базу данных.

<?php
$arr = [
    0 => [
        0 => "http://example.com"
    ],

    1 => [
        0 => "http://example2.com"
    ]
];

for ($i = 0; $i < count($arr); $i++) {
    foreach ($arr[$i] as $key => $value) {
        echo $key . " => " . $value . "<br>";
    }
}
?>

Вывод

0 => http://example.com 0 => http://example2.com

  • 0
    Это говорит о том, что строка foreach предоставляет неверный аргумент.
  • 0
    Что вы предоставили в цикле foreach ?
Показать ещё 8 комментариев

Ещё вопросы

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