对于我的学期项目,我正在尝试读取文件并从中提取数据以插入数据库。但是,我得到一个"数组到字符串转换"错误。我花了一段时间试图解决这个问题,但我无法弄清楚具体是什么导致它。任何帮助将不胜感激!
此行发生错误:
$mydb->query("INSERT INTO account(`UserID`, `Role`, `CaptureID`, `FirstName`, `LastName`, `EmailAddress`, `PhoneNumber`) VALUES($newuserid, 2, $capid, '$fname', '$lname', '$email', '$phone');");
代码:
<?php
require_once("db".DIRECTORY_SEPARATOR."db.php");
global $mydb;
class DataExtractor{
function extract($file, $capid){
global $mydb;
$phone = "";
$email = "";
$fname = "";
$lname = "";
$handle = fopen($file, "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
if(preg_match('/^(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}$/i',$line, $matches)){
$phone = $matches[0];
}
if (preg_match("/[a-z\d._%+-]+@[a-z\d.-]+\.[a-z]{2,4}\b/i", $line, $email)){
$email = $email[0];
}
$name = $this->search($line);
$fname = $name[0];
$lname = $name[1];
/*if (isset($phone) && isset($email) && isset($fname) && isset($lname)){ //leave out for now
break;
}*/
}
$newuserid = md5(uniqid(rand(), true));
$actid = md5(uniqid(rand(), true));
$mydb->query("INSERT INTO account(`UserID`, `Role`, `CaptureID`, `FirstName`, `LastName`, `EmailAddress`, `PhoneNumber`) VALUES($newuserid, 2, $capid, '$fname', '$lname', '$email', '$phone');"); //ERROR
$mydb->query("INSERT INTO activation(`ActivationID`, `UserID`, `Activated`) VALUES($actid, $newuserid, 0);");
fclose($handle);
} else {
// error opening the file.
}
}
function search($str){
require "utils".DIRECTORY_SEPARATOR."dictionary-first-names.php";
$arr = explode(" ", $str);
for ($i = 0; $i < sizeof($str); $i++){
if (in_array($arr[$i], $dict)){
return array($arr[$i], $arr[$i+1]);
}
}
}
}
$dataextract = new DataExtractor();?>
答案 0 :(得分:0)
问题发生在$email
。如果正则表达式无法匹配,$email
变量将包含一个数组,而不是字符串,如您所期望的那样。这就是错误发生的原因。
此外,在同一行和后面的行中,变量$newuserid
和$actid
应该用引号括起来,因为md5()
函数生成的结果是一个字符串。