阵列到强转换错误?

时间:2018-03-12 02:11:30

标签: php

对于我的学期项目,我正在尝试读取文件并从中提取数据以插入数据库。但是,我得到一个"数组到字符串转换"错误。我花了一段时间试图解决这个问题,但我无法弄清楚具体是什么导致它。任何帮助将不胜感激!

此行发生错误:

$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();?>

1 个答案:

答案 0 :(得分:0)

问题发生在$email。如果正则表达式无法匹配,$email变量将包含一个数组,而不是字符串,如您所期望的那样。这就是错误发生的原因。

此外,在同一行和后面的行中,变量$newuserid$actid应该用引号括起来,因为md5()函数生成的结果是一个字符串。