Php mysqli上的未知列->;查询结果

Php mysqli上的未知列->;查询结果,php,mysql,mysqli,Php,Mysql,Mysqli,我的代码是: if (($handle = fopen(self::UPLOAD_PATH . $this->_filename, "r")) !== false) { $mysqlCols = array(); while (($data = fgetcsv($handle)) !== false) { $num = count($data); for ($c = 0; $c < $num; $c++) { if ($row == 0) {

我的代码是:

if (($handle = fopen(self::UPLOAD_PATH . $this->_filename, "r")) !== false) {
$mysqlCols = array();
while (($data = fgetcsv($handle)) !== false) {
    $num = count($data);
    for ($c = 0; $c < $num; $c++) {

        if ($row == 0) {
            if (md5($data[$c]) == 'c7393c74ae43e690f8bbb78fcc4d9223') {
                $data[$c] = 'Unique ID'; // Fix due to an issue with wrong characters while reading...
            }
            $mysqlCols[$c] = $data[$c];
        } else {
            $mysqlValues[$c] = $mysqli->real_escape_string($data[$c]);
        }
    }

    if ($row > 0) {
        $query = "INSERT INTO `temporary_datas` (`" . implode('`, `', $mysqlCols) . "`) VALUES ('" . implode("', '", $mysqlValues) . "')";
        echo $query . ';<br>';
        $result = $mysqli->query($query) or die($mysqli->error);
        var_dump($result);
    }

    $row++;

    if ($count++ == 3) {
        break;
    }
}
fclose($handle);
} else {
    return false;
}
我的结果是(var_dump one):

“字段列表”中的未知列“价格格式”

如果我接受这个查询并直接通过mysql运行,它就可以正常工作。我不明白怎么了。有什么想法吗



不必通读整个过程,可以尝试一个快速建议,即在“CPA\r”的最终值中不使用“\r”,因为在PHP中,这是回车的转义序列,可能会导致问题

编辑:我认为内容包括:

'Mozilla/5.0 (Linux; Android 4.3; ka-ge; SAMSUNG GT-I9505 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36'
-所以它在逗号处分裂:

" 'Mozilla/5.0 (Linux; Android 4.3; ka-ge; SAMSUNG GT-I9505 Build/JSS15J) AppleWebKit/537.36 (KHTML"
" like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36'"
因此,需要为fgetcsv()指定字段封闭字符。例如

在插入SQL$查询时,可能需要重新添加单引号

编辑2: 尝试使用以下命令进行调试:

/*
if (($handle = fopen(self::UPLOAD_PATH . $this->_filename, "r")) !== false) {
$mysqlCols = array();
while (($data = fgetcsv($handle)) !== false) {
    $num = count($data);
    for ($c = 0; $c < $num; $c++) {

        if ($row == 0) {
            if (md5($data[$c]) == 'c7393c74ae43e690f8bbb78fcc4d9223') {
                $data[$c] = 'Unique ID'; // Fix due to an issue with wrong characters while reading...
            }
            $mysqlCols[$c] = $data[$c];
        } else {
            $mysqlValues[$c] = $mysqli->real_escape_string($data[$c]);
        }
    }

    if ($row > 0) {*/
        #$query = "INSERT INTO `temporary_datas` (`" . implode('`, `', $mysqlCols) . "`) VALUES ('" . implode("', '", $mysqlValues) . "')";
        $query = "INSERT INTO `temporary_datas` (`Unique ID`, `Conversion Date`, `Last Updated`, `Click Date`, `Affiliate ID`, `Affiliate Name`, `Advertiser ID`, `Advertiser Name`, `Offer ID`, `Offer Name`, `Creative`, `Sub ID`, `Sub ID 2`, `Sub ID 3`, `Sub ID 4`, `Sub ID 5`, `Type`, `Paid`, `Price Paid Currency`, `Received`, `Price Received Currency`, `Reached Step`, `Pixel`, `Throttled`, `Returned`, `Test`, `Transaction ID`, `IP Address`, `Click IP Address`, `Country`, `Conversion Referrer`, `Referrer`, `Conversion User Agent`, `Click User Agent`, `Note`, `Approved`, `Disposition`, `Region`, `Language`, `Provider Name`, `Device`, `Operating System`, `OS (Major Version)`, `OS (Minor Version)`, `Browser`, `Browser (Major Version)`, `Browser (Minor Version)`, `Conversion Score`, `Paid Unbilled`, `Received Unbilled`, `Click Request Session ID`, `Event Name`, `Price Format`) VALUES ('1258806', '02/01/2014 2:40:05 PM', '02/01/2014 2:46:22 PM', '02/01/2014 2:28:44 PM', '120958', 'iTap Ads', '163', 'Zinq Media', '3002', '[WAP] Android Clean-up - ES', '37670', '', 'cU2U3A68JPK94J990MAK5QFRKD', '{gclid}', '849d37fa-1c14-466e-87c1-2325c23d073c', '', 'Click', '10.7000', 'USD', '13.3800', 'USD', '1', 'True', 'False', 'False', 'False', '', '95.138.134.110', '46.222.188.248', 'ES', '', 'http://droid-safety.com/sp/scan1/?voluumdata=vid..00000305-cc9e-4715-8000-000000000000__vpid..0c977800-8b73-11e3-8759-c26a9a686c33__caid..c1c24ba3-cbe3-470d-9e8f-192a66242968__lid..849d37fa-1c14-466e-87c1-2325c23d073c__oid1..1ac7589d-b050-4ec2-8e03-3cf386', 'CAKE: (getcake.com): Tracking Service', 'Mozilla/5.0 (Linux; Android 4.3; ka-ge; SAMSUNG GT-I9505 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36', '', 'False', '', 'Madrid', 'GEORGIAN', 'xfera moviles s.a.', '', 'Android', '4', '4.3', 'Chrome', 'Other', '', '0.00', '0.0000', '13.3800', '29699629', '', 'CPA\r');";
        echo $query . ';<br>';
        $result = $mysqli->query($query) or die($mysqli->error);
        var_dump($result);
    /*}

    $row++;

    if ($count++ == 3) {
        break;
    }
}
fclose($handle);
} else {
    return false;
}
*/
/*
if($handle=fopen(self::UPLOAD_PATH.$this->_filename,“r”)!==false){
$mysqlCols=array();
while(($data=fgetcsv($handle))!==false){
$num=计数($data);
对于($c=0;$c<$num;$c++){
如果($row==0){
如果(md5($data[$c])==“c7393c74ae43e690f8bbb78fcc4d9223”){
$data[$c]=“唯一ID”;//修复由于读取时字符错误引起的问题。。。
}
$mysqlCols[$c]=$data[$c];
}否则{
$mysqlValues[$c]=$mysqli->real_escape_字符串($data[$c]);
}
}
如果($row>0){*/
#$query=“插入到`临时数据'(`).implode(`,`,$mysqlCols)。”`)值('.implode('',',$mysqlValues)。“)”;
$query=“插入到“临时”数据中”(`Unique ID`、`Conversion Date`、`Last Updated`、`Click Date`、`Affiliate ID`、`Affiliate Name`、`广告商ID`、`Offer ID`、`Offer Name`、`Creative`、`Sub ID`、`Sub ID 2`、`Sub ID 3`、`Sub ID 4`、`Sub ID 5`、`Type`、`pad`、`Price pad Currency`、`Received`、`Price Received`、`Price Received`、Price Received Currency`、`reated Currency`、`reated Step`、`hights`urned`、`Test`、`Transaction ID`、`IP Address`、`Click IP Address`、`Country`、`Conversion referer`、`referer`、`Conversion User Agent`、`Click User Agent`、`Note`、`Approved`、`Disposition`、`Region`、`Language`、`Provider Name`、`Device`、操作系统`、`OS(主要版本)`、`OS(次要版本)`、`Browser`、`Browser`、浏览器(主要版本)`“浏览器(次要版本)”、“转换分数”、“已付款未开票”、“已收到未开票”、“点击请求会话ID”、“事件名称”、“价格格式”)值('1258806'、'02/01/2014 2:40:05 PM'、'02/01/2014 2:46:22 PM'、'02/01/2014 2:28:44 PM'、'120958'、'iTap Ads'、'163'、'Zinq Media'、'3002'、'WAP]Android清理-ES、'37670'、'cU2U3A68JPK94J990MAK5QFRKD'、'gclid}“849d37fa-1c14-466e-87c1-2325c23d073c”、“点击”、“10.7000”、“美元”、“13.3800”、“美元”、“1”、“真”、“假”、“假”、“假”、“假”、“95.138.134.110”、“46.222.188.248”、“ES”等http://droid-safety.com/sp/scan1/?voluumdata=vid..00000305-cc9e-4715-8000-000000000000虚拟专用数据库0c977800-8b73-11e3-8759-c26a9a686c33虚拟专用数据库c1c24ba3-cbe3-470d-9e8f-192a66242968_uuuulid..849d37fa-1c14-466e-87c1-2325c23d073c_uuuuuuuOID1..1ac7589d-b050-4ec2-8e03-3cf386',CAKE:(getcake.com):跟踪服务,',Mozilla/5.0(Linux;安卓4.3;ka-ge;三星GT-I9505 Build/JSS15J)AppleWebKit/537.36(KHTML,像Gecko)版本/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36',“False',“Madrid',“GEORGIAN',“xfera moviles s.a.”,“'Android','4','4.3','Chrome','Other',”,“0.00','0.0000','13.3800','29699629',“CPA\r');”;
回显$query。“;
”; $result=$mysqli->query($query)或die($mysqli->error); var_dump($结果); /*} $row++; 如果($count++==3){ 打破 } } fclose($handle); }否则{ 返回false; } */
它可能与空格有关

  • 检查选择列时是否没有空间

     `Price Format `
                  ^----//space here
    
检查

  • 在表中检查该列在列之前或之后是否没有空格

    $query = "INSERT INTO `temporary_datas` (`" . implode('`, `', $mysqlCols) . "`)
            VALUES ('" . implode("', '", $mysqlValues) . "') ";
    
加上这个

  $data[$c] = trim($data[$c], " \r");

未修复此问题。抱歉,否。现在的错误是:“列计数与第1行的值计数不匹配”在插入$query之前,你是在添加单逗号吗?不,没有半列,我在你最初的帖子中没有看到,你后来的结果转储也没有显示。好吧,至少你现在已经修复了。PHP和你的直接MySQL连接在同一个数据库中吗?奇怪的事情发生了,可能是looking在副本或其他服务器上。为什么要在数据库字段名中添加空格和标点符号???无论如何,这是从文本文件中获取列名;文件中是否可能有坏字符?是否需要从文件中获取列名,或者是否可以修复列名?@Andrew不,这没关系,因为当我选择时,它可以正常工作。@miken32我已经通过删除空格和特殊字符修复了名称,但我仍然有同样的问题。可能会发布几行输入文件?还有启动数据库连接的代码。我已经再次检查并重新创建了结构,以确保它不会修复问题:尝试我提出的这个查询。嗯,我想这是值得的这个额外的引号。我已经尝试过了,但是失败了。您离解决方案最近。我必须添加以下内容:$data[$c]=trim($data[$c],“\r”);
/*
if (($handle = fopen(self::UPLOAD_PATH . $this->_filename, "r")) !== false) {
$mysqlCols = array();
while (($data = fgetcsv($handle)) !== false) {
    $num = count($data);
    for ($c = 0; $c < $num; $c++) {

        if ($row == 0) {
            if (md5($data[$c]) == 'c7393c74ae43e690f8bbb78fcc4d9223') {
                $data[$c] = 'Unique ID'; // Fix due to an issue with wrong characters while reading...
            }
            $mysqlCols[$c] = $data[$c];
        } else {
            $mysqlValues[$c] = $mysqli->real_escape_string($data[$c]);
        }
    }

    if ($row > 0) {*/
        #$query = "INSERT INTO `temporary_datas` (`" . implode('`, `', $mysqlCols) . "`) VALUES ('" . implode("', '", $mysqlValues) . "')";
        $query = "INSERT INTO `temporary_datas` (`Unique ID`, `Conversion Date`, `Last Updated`, `Click Date`, `Affiliate ID`, `Affiliate Name`, `Advertiser ID`, `Advertiser Name`, `Offer ID`, `Offer Name`, `Creative`, `Sub ID`, `Sub ID 2`, `Sub ID 3`, `Sub ID 4`, `Sub ID 5`, `Type`, `Paid`, `Price Paid Currency`, `Received`, `Price Received Currency`, `Reached Step`, `Pixel`, `Throttled`, `Returned`, `Test`, `Transaction ID`, `IP Address`, `Click IP Address`, `Country`, `Conversion Referrer`, `Referrer`, `Conversion User Agent`, `Click User Agent`, `Note`, `Approved`, `Disposition`, `Region`, `Language`, `Provider Name`, `Device`, `Operating System`, `OS (Major Version)`, `OS (Minor Version)`, `Browser`, `Browser (Major Version)`, `Browser (Minor Version)`, `Conversion Score`, `Paid Unbilled`, `Received Unbilled`, `Click Request Session ID`, `Event Name`, `Price Format`) VALUES ('1258806', '02/01/2014 2:40:05 PM', '02/01/2014 2:46:22 PM', '02/01/2014 2:28:44 PM', '120958', 'iTap Ads', '163', 'Zinq Media', '3002', '[WAP] Android Clean-up - ES', '37670', '', 'cU2U3A68JPK94J990MAK5QFRKD', '{gclid}', '849d37fa-1c14-466e-87c1-2325c23d073c', '', 'Click', '10.7000', 'USD', '13.3800', 'USD', '1', 'True', 'False', 'False', 'False', '', '95.138.134.110', '46.222.188.248', 'ES', '', 'http://droid-safety.com/sp/scan1/?voluumdata=vid..00000305-cc9e-4715-8000-000000000000__vpid..0c977800-8b73-11e3-8759-c26a9a686c33__caid..c1c24ba3-cbe3-470d-9e8f-192a66242968__lid..849d37fa-1c14-466e-87c1-2325c23d073c__oid1..1ac7589d-b050-4ec2-8e03-3cf386', 'CAKE: (getcake.com): Tracking Service', 'Mozilla/5.0 (Linux; Android 4.3; ka-ge; SAMSUNG GT-I9505 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36', '', 'False', '', 'Madrid', 'GEORGIAN', 'xfera moviles s.a.', '', 'Android', '4', '4.3', 'Chrome', 'Other', '', '0.00', '0.0000', '13.3800', '29699629', '', 'CPA\r');";
        echo $query . ';<br>';
        $result = $mysqli->query($query) or die($mysqli->error);
        var_dump($result);
    /*}

    $row++;

    if ($count++ == 3) {
        break;
    }
}
fclose($handle);
} else {
    return false;
}
*/
 `Price Format `
              ^----//space here
$query = "INSERT INTO `temporary_datas` (`" . implode('`, `', $mysqlCols) . "`)
        VALUES ('" . implode("', '", $mysqlValues) . "') ";
  $data[$c] = trim($data[$c], " \r");