【问题标题】:PHP implode not working with single quotes?PHP 内爆不能使用单引号?
【发布时间】:2013-07-01 14:42:19
【问题描述】:

我已经搜索了关于这个问题的最后一个小时,但它变得非常烦人......

无论如何,我正在尝试将数据插入到 mysqli 数据库中,我之前已经做过很多次了,但由于某种原因,我无法弄清楚出了什么问题......

<?php

require_once("../config/dbmetar.php");

$delimiter = ',';
$file = "metars.csv";
$db = new mysqli(DB_HOST_METAR, DB_USER_METAR, DB_PASS_METAR, DB_NAME_METAR);
$r = 0;

if (($handle = fopen($file, "r")) !== FALSE) {

while (($data = fgetcsv($handle, 5000, $delimiter)) !== FALSE) {

    if ($r >= 6) {

        foreach($data as $i => $content) { 

            $data[$i] = $db->real_escape_string($content);

        }

        echo "INSERT INTO metars VALUES('" . implode("','", $data) . "');" . "<br>";
        //$db->query("INSERT INTO metars VALUES('" . implode("','", $data) . "');" );

    }

    $r++;

}

fclose($handle);
}

?>

主要问题是插入到 metars 值中...这些值都应该用逗号分隔,每个字段值周围都有单引号...

目前这是 echo 正在导出的内容:

INSERT INTO metars VALUES('PAJZ 011132Z AUTO 1 3/4SM BR FEW009 BKN019 OVC026 08/07 A2959 RMK AO2 PWINO TSNO P0001,PAJZ,2013-07-01T11:32:00Z,59.73,-157.27,8.0,7.0,,,,1.75,29.589567,,,TRUE,TRUE,,,TRUE,,TRUE,BR,FEW,900,BKN,1900,OVC,2600,,,IFR,,,,,,0.01,,,,,,SPECI,82.0');

有什么建议吗?

Var_dump($data) 返回了这些:

array(1) { [0]=> string(238) "PAJZ 011132Z AUTO 1 3/4SM BR FEW009 BKN019 OVC026 08/07 A2959 RMK AO2 PWINO TSNO P0001,PAJZ,2013-07-01T11:32:00Z,59.73,-157.27,8.0,7.0,,,,1.75,29.589567,,,TRUE,TRUE,,,TRUE,,TRUE,BR,FEW,900,BKN,1900,OVC,2600,,,IFR,,,,,,0.01,,,,,,SPECI,82.0" } INSERT INTO metars VALUES('');
array(1) { [0]=> string(153) "CYOD 011131Z 18002KT 1/2SM FG FEW250 RMK CI0,CYOD,2013-07-01T11:31:00Z,54.4,-110.28,,,180,2,,0.5,,,,,,,,,,,FG,FEW,25000,,,,,,,LIFR,,,,,,,,,,,,SPECI,544.0" } INSERT INTO metars VALUES('');
array(1) { [0]=> string(276) "CYYD 011131Z AUTO VRB06KT 5SM -RA BR FEW007 BKN070 OVC084 15/14 A3005 RMK PRESRR PCPN 1.0MM PAST HR SLP173 DENSITY ALT 1900FT,CYYD,2013-07-01T11:31:00Z,54.82,-127.18,15.0,14.0,0,6,,5.0,30.050198,1017.3,,TRUE,,,,,,,-RA BR,FEW,700,BKN,7000,OVC,8400,,,MVFR,,,,,,,,,,,,SPECI,523.0" } 

【问题讨论】:

  • var_dump($data),您实际上可能没有得到一个包含多个值的数组。
  • ...原因可能是某个地方的编码问题,这意味着分隔符不匹配。
  • "这些值都应该用逗号分隔,每个字段值都用单引号括起来......" 输入中似乎只引用了字符串,而布尔值、日期和数字则没有。跨度>
  • @Powerlord 没有任何需要在 CSV 中引用,除非它包含分隔符。
  • @deceze 没错,但发布的代码假定所有行都被引用。

标签: php mysql implode


【解决方案1】:

这意味着 $data 有 1 个项目,因为 implode 以这种方式工作得很好。

var_dump($data);

请运行转储。也许你的分隔符有误,所以 $data 只有一个元素。

【讨论】:

  • var_dump 是否...看起来好像正在构建的数组是您提到的单个字符串...有没有简单的方法来纠正它?
  • 似乎分隔符很好。检查你的语言环境,php.net 说它会影响结果。
【解决方案2】:

我试试这些代码:

$a = array('PAJZ 011132Z AUTO 1 3/4SM BR FEW009 BKN019 OVC026 08/07 A2959 RMK AO2 PWINO TSNO P0001','PAJZ', '2013-07-01T11:32:00Z','','a','b','');

echo implode("','", $a);

结果是:

效果很好!

我的 php 版本是: PHP 5.3.19 (cli) (内置: Apr 30 2013 21:16:28) 版权所有 (c) 1997-2012 PHP 集团 Zend Engine v2.3.0,版权所有 (c) 1998-2012 Zend Technologies

你可以在 php.net找到这个

所以,检查你的 php 版本!

【讨论】:

  • PHP 版本 5.4.16,我知道你是如何得到这个结果的,但是我不得不问为什么我的 foreach 循环没有按预期工作?
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 2015-01-20
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2013-02-05
  • 2012-03-26
相关资源
最近更新 更多