2012-11-15 1 views
2

안녕하세요. 내 첫 게시 시간입니다. 완전히 멈추었 기 때문에 좋을 것이라고 생각했습니다. PHP의 switch 및 If/else 문에는 가변 범위가 없다는 것이 내 이해입니다.정의되지 않은 변수 - PHP에서 스위치 문에 범위가 있습니다.

내 문제는 약 5 행의 값이있는 CSV 파일이며 mySQL DB 테이블에 입력해야합니다 (열 머리글은 내 switch 문에 대한 "사례"에 표시됩니다).) 어쨌든 필자는 CSV 파일을 파싱하고 데이터가 있어야하며 열에 있어야하며 변수에 저장해야하는지 확인합니다. 그런 다음 모든 변수를 배열에 저장하고 직렬화 한 다음 내 SQL 쿼리에 전달합니다. C의 기업 : (!) 공지 사항 무시 오류 억제 : 정의되지 않은 변수

나는 오류 SCREAM가 계속 \ WAMP \ www가 \ lcimport \ serialize.php 라인에 98

그러나 나는 알고있다 그 변수들은 내가 그들을 에코 (echo) 할 수 있고 호출 될 수 있기 때문입니다. 하지만 이러한 오류가 사라지지 않으면 내 쿼리가 실행되지 않아 db 테이블에 데이터가 채워지지 않습니다.

무엇이 잘못 되었나요?

<?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 만 조건문 내부에 온다 오류