PHP многомерный массив в БД mySQL - PullRequest
0 голосов
/ 25 апреля 2011

Я пытаюсь получить данные из файла XLS и выгрузить их в базу данных mySQL.

Я нашел php-файл, который возьмет содержимое XLS и отобразит его в виде табличных данных на веб-странице. Я попытался изменить этот код, чтобы вставить свои данные в БД.

Вот функция, которая выполняет работу - и которую я пытаюсь изменить:

function dumpSQL($row_numbers=false,$col_letters=false,$sheet=0) {
        $xlsData = '';
        for($row=1;$row<=$this->rowcount($sheet);$row++) {
            $rowheight = $this->rowheight($row,$sheet);
            for($col=1;$col<=$this->colcount($sheet);$col++) {
                if(!$this->sheets[$sheet]['cellsInfo'][$row][$col]['dontprint']) {
                    // cell value
                    //$val = $this->val($row,$col,$sheet);
                    $xlsData[$row][$col] = $this->val($row,$col,$sheet);
                }
            }
        }
        // Make a MySQL Connection
        mysql_connect("*******", "******", "*******") or die(mysql_error());
        mysql_select_db("***********") or die(mysql_error());
        $sql = "INSERT INTO BEER_LOCATIONS (LOCATION_NAME, LOCATION_STREET, LOCATION_CITY, LOCATION_STATE, LOCATION_ZIPCODE, LOCATION_PHONE, BEER_STYLE ) VALUES ($xlsData)";
        $result = mysql_query("
            $sql
        ") or die(mysql_error());
}

Я получаю следующую ошибку при запуске этого кода: У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса

Я также попытался удалить часть, где он получает многомерный массив, и просто построить статическую версию:

$xlsData[0][0] = "Hello World";
$xlsData[0][1] = "38380 - Thirteen Coins-Boren";
$xlsData[0][2] = "125 Boren Ave N";
$xlsData[0][3] = "Seattle";
$xlsData[0][4] = "WA";
$xlsData[0][5] = "98109";
$xlsData[0][6] = "2066822513";
$xlsData[0][7] = "34740 - Georgetown Keg - 1/2 Manny Pale";
$xlsData[1][0] = "Hello World";
$xlsData[1][1] = "38380 - Thirteen Coins-Boren";
$xlsData[1][2] = "125 Boren Ave N";
$xlsData[1][3] = "Seattle";
$xlsData[1][4] = "WA";
$xlsData[1][5] = "98109";
$xlsData[1][6] = "2066822513";
$xlsData[1][7] = "34740 - Georgetown Keg - 1/2 Manny Pale";
$xlsData[2][0] = "Hello World";
$xlsData[2][1] = "38380 - Thirteen Coins-Boren";
$xlsData[2][2] = "125 Boren Ave N";
$xlsData[2][3] = "Seattle";
$xlsData[2][4] = "WA";
$xlsData[2][5] = "98109";
$xlsData[2][6] = "2066822513";
$xlsData[2][7] = "WA";
$xlsData[3][0] = "Hello World";
$xlsData[3][1] = "86036 - Aafes Ft Lewis Class Vi";
$xlsData[3][2] = "Bldg 2202";
$xlsData[3][3] = "Fort Lewis";
$xlsData[3][4] = "WA";
$xlsData[3][5] = "98433";
$xlsData[3][6] = "2539644128";
$xlsData[3][7] = "42624 - Georgetown Keg - 1/4 Manny Pale";

Я получаю ту же ошибку.

Я попытался сериализовать свои данные до того, как вставить их в свою БД:

$xlsData = serialize($xlsData);

Спасибо за любую помощь.

У меня проблемы с реализацией mysql_real_escape_string (). Кажется, что нужно обернуть вокруг implode (), но я получаю сообщение об ошибке при попытке этого.

$sql = "INSERT INTO BEER_LOCATIONS (LOCATION_NAME, LOCATION_STREET, LOCATION_CITY, LOCATION_STATE, LOCATION_ZIPCODE, LOCATION_PHONE, BEER_STYLE ) VALUES ('" . mysql_real_escape_string(implode("', '", $row)) . "')"; 

Я получаю эту ошибку при попытке: Количество столбцов не соответствует значению в строке 1

Еще раз спасибо.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

Я получил ответ от другого полезного человека. Спасибо всем, кто мне помог:)

implode("', '", array_map('mysql_real_escape_string', $row))
0 голосов
/ 25 апреля 2011

Попробуйте заменить это:

$sql = "INSERT INTO BEER_LOCATIONS (LOCATION_NAME, LOCATION_STREET, LOCATION_CITY, LOCATION_STATE, LOCATION_ZIPCODE, LOCATION_PHONE, BEER_STYLE ) VALUES ($xlsData)";
$result = mysql_query("
    $sql
") or die(mysql_error());

на это:

foreach($xlsData as $row) {
    $sql = "INSERT INTO BEER_LOCATIONS (LOCATION_NAME, LOCATION_STREET, LOCATION_CITY, LOCATION_STATE, LOCATION_ZIPCODE, LOCATION_PHONE, BEER_STYLE ) VALUES ('" . implode("', '", $row) . "')";
    $result = mysql_query($sql) or die(mysql_error());
}

Вы должны вставлять каждую строку по одной за раз, вот что выполняет цикл foreach.Кроме того, вы не можете просто поместить сам массив для значений.Функция implode() превращает массив значений столбца в строку.

EDIT: Кроме того, вам, вероятно, следует изменить $xlsData = ''; в начале функции на $xlsData = array(); I 'На самом деле я не уверен, является ли проблема, как у вас, проблемой, но поскольку $ xlsData должен быть массивом, лучше установить его в пустой массив, чем в пустую строку.

...