大家好,这是我第一次发帖,认为自从我完全陷入困境后会很好。据我所知,PHP中的switch和If / else语句没有可变范围。
我的问题是我有一个包含大约5行值的CSV文件(示例1),我需要将它放入mySQL DB表中(列标题在我的“case”中表示为我的switch语句)无论如何,我正在解析CSV文件,并检查以确保数据在列中,并将其存储在变量中。然后我将所有变量存储在一个被序列化的数组中,然后传递给我的SQL查询。
我继续得到错误 SCREAM:忽略错误抑制 (!)注意:未定义的变量:第98行的C:\ wamp \ www \ lcimport \ serialize.php中的公司
但是我知道那些变量是因为我可以回应它们并且它们将被调用。但除非这些错误消失,否则我的查询将无法运行,因此不会填充我的数据库表。
我做错了什么?
<?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 :(得分:1)
如果其他所有变量都存在且工作正常,则缺少的break;
应该是公司案例的问题。
与循环内的关系数据库进行通信并不是一个好主意,将结果存储到数组中的内存和进程效率更高,并且在获得所有数据之后,只需插入一个简单的请求,因为< / p>
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;
}
答案 1 :(得分:0)
只需在条件语句之前(if())
之前定义它$company = '';
由于$ company仅在条件语句中出现,当条件失败时,它将被定义为未定义,因此错误