2

大家好,这是我第一次发帖,我觉得这会很好,因为我完全卡住了。我的理解是 PHP 中的 switch 和 If/else 语句没有变量范围。

我的问题是我有一个包含大约 5 行值的 CSV 文件(示例文件),我需要将其放入 mySQL DB 表中(列标题在我的 switch 语句的“案例”中表示)但无论如何我'正在解析 CSV 文件并检查以确保数据在它应该在的列中并将其存储在变量中。然后,我将所有变量存储在一个数组中,该数组被序列化,然后传递到我的 SQL 查询中。

我继续收到错误 SCREAM: Error suppress denied for ( ! ) 注意:未定义的变量: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);
    }


?>
4

2 回答 2

1

如果所有其他变量都存在并且工作正常,那么缺少的break;应该是公司案例的问题。

在循环中与关系数据库进行通信不是一个好主意,将结果存储到数组中会提高内存和处理效率,并且在获得所有数据后,只需使用简单的请求进行插入,因为

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

完美运行。

PHP 有一个命令来处理这样的进程:

while (($data = fgetcsv($handle, 1000, ",")) !== false) {
    if ($row == 1 || $row == 2) {
        $row++;
        continue;
    }
    list ($contact, $company, $address1 /*, ...*/) = $data;
}
于 2012-11-15T05:59:27.327 回答
0

只需在条件语句之前定义它(在 if() 之前)

$company = '';

由于 $company 仅在条件语句中出现,当条件失败时,它是未定义的,因此错误

于 2012-11-15T05:49:45.057 回答