2011-04-25 173 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))