2011-04-25 154 views
0

我想從XLS文件中抓取數據並將其轉儲到MySQL數據庫中。PHP多維數組到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(),但是當我嘗試時出現錯誤。 列數並不在行1再次

感謝匹配值計數:

$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)) . "')"; 

,當我嘗試,我得到這個錯誤。

+0

這實際上並不是你要做的序列化。序列化是當你轉換一個對象/數組/等。到一個字符串,所以你可以存儲它,而不會丟失結構。當你在數據庫中存儲一組值時,你實際上只是調整它們以適應數據庫結構。 – Compeek 2011-04-25 20:22:25

+0

感謝您提供有關序列化的信息。我刪除了該代碼。 – Mark 2011-04-25 23:50:10

+0

您是否看到我的答案適合您?:) – Compeek 2011-04-26 02:52:21

回答

0

嘗試更換此:

$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()函數將列值的數組轉換爲一個字符串。

編輯:此外,你應該改變$xlsData = '';接近函數開頭$xlsData = array();我實際上並不知道,如果你有它的方式是一個問題,但由於$ xlsData應該是一個數組,最好將它設置爲空數組而不是空字符串。

+0

另外,如果您的數據中有逗號,則會破壞SQL查詢。它看起來並不像您提供的數據中的任何內容,所以我不想給出一個過於複雜的答案,但實際上您想使用[mysql_real_escape_string()](http://php.net/manual /en/function.mysql-real-escape-string.php)來轉義任何可能成爲問題的字符。 – Compeek 2011-04-25 20:13:02

0

我從另一個有幫助的人那裏得到了答案。感謝所有幫助我的人:)

implode("', '", array_map('mysql_real_escape_string', $row))