2012-11-15 51 views
2

大家好,這是我第一次發佈,認爲它會很好,因爲我完全卡住了。我的理解是,PHP中的switch和If/else語句沒有可變範圍。未定義的變量 - 做開關語句的範圍是PHP

我的問題是我有一個約5行值的CSV文件(示例一),我需要把它放到mySQL數據庫表中(列標題在我的「case」中代表我的switch語句)BUt無論如何,我解析CSV文件並檢查以確保數據在它應該是它的列,並將其存儲在一個變量。然後,我將所有變量存儲在一個正在序列化的數組中,然後傳遞到我的SQL查詢中。

我繼續得到錯誤 SCREAM:(!)忽略 注意屏蔽錯誤:未定義的變量:公司在C:\ WAMP \ WWW \ lcimport \ serialize.php上線98

但我知道這些變量在那裏,因爲我可以迴應他們,他們將被調用。但除非這些錯誤消失,我的查詢將不會運行,因此不填充我的數據庫表。

我做錯了什麼?

<?php 
//define some constants 
$db = 'lc'; 
mysql_connect('localhost', 'root', ''); 
mysql_select_db($db); 
mysql_error(); 
$uid = md5(uniqid(time())); 

//we only have this here to be a row counter 
$row = 1; 
if (($handle = fopen("C:\\wamp\\www\\lcimport\\4records.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     //var_dump($data); 
     // echo $data[0]; 
     echo ''; 
     if ($row === 1) { 
     $header = $data; 
     }  

     $row++; 
     for ($c=0; $c < $num; $c++) { 
      //echo $data[$c] . "<br />\n"; 
      if ($row === 2) continue; 
      switch ($header[$c]){ 
       case "Contact": 
         $contact = explode (" ", $data[$c]); 
         $firstName = $contact[0]; 
         $lastName = $contact[1]; 
       break; 

       case "Company": 
        $company = $data[$c]; 


       case "Address1": 
       //store 
        $address1 = $data[$c]; 

       break; 

       case "Address2": 
        $address2 = $data[$c]; 

       break; 

       case "Address3": 
        $address3 = $data[$c]; 

       break; 

       case "City": 
        $city = $data[$c]; 

       break; 

       case "State": 
        $state = $data[$c]; 

       break; 

       case "Zip": 
        $zip = $data[$c]; 

       break; 

       case "Phone1": 
        $phone1 = $data[$c]; 
       break; 

       case "Phone2": 
        $phone2 = $data[$c]; 
       break; 

       case "Phone 3": 
        $phone3 = $data[$c]; 
       break; 

       case "Fax": 
        $fax = $data[$c]; 
       break;   

       case "Accountno": 
        $accountNo = $data[$c]; 
       break; 

       default: 
       $junk = $data[$c]; 
       break; 


      } 




     }  
     echo $company; 
      $meta = serialize(Array(
        "firstname" => $firstName, 
        "lastname" => $lastName, 
        "lawfirmname" => $company, 
        'address' => $address1, 
        'city' => $city, 
        'state' => $state, 
        'zip' => $zip, 
        'fulladdress' => '', 
        'officenumber' => $phone1, 
        'faxnumber' => $fax, 
        'mobilenumber' => $phone2, 
        'email' =>'nothing', 
        'website' => 'somthing.com', 
        'privacy' => 0, 
        'status' =>1 
        )); 




     mysql_query("INSERT INTO `mg_profiles` (meta) VALUES ($meta)"); 
     mysql_error(); 

    } 
    fclose($handle); 
    } 


?> 
+0

我敢肯定,這有什麼用它做:'如果($行=== 2)繼續;' –

回答

1

如果其他變量都存在並且正常工作,那麼缺少break;應該是公司的問題。

在循環內與關係數據庫進行通信不是一個好主意,它將更多的內存和流程高效地存儲到數組中,並且在所有數據都得到後,只需插入一個簡單的請求,因爲

INSERT INTO `mg_profiles` (meta) VALUES (...), (...), (...) 

完美。

PHP有command來處理這樣的流程:

while (($data = fgetcsv($handle, 1000, ",")) !== false) { 
    if ($row == 1 || $row == 2) { 
     $row++; 
     continue; 
    } 
    list ($contact, $company, $address1 /*, ...*/) = $data; 
} 
+0

的多重插入直到您達到最大查詢長度爲止,此時您需要將查詢拆分爲塊。 –

+0

這讓我難以置信!完全忘記了list()函數,它解決了我的問題,謝謝。如果我可以upvote我會 – user1825743

0

只是條件語句之前定義它(前如果())

$company = ''; 

因爲$公司裏面只有一個條件語句出現,當條件不滿足,它WUD是不確定的,因此,錯誤