【问题标题】:PHP - adding a string to a variable (array) CSV --> MySQLPHP - 将字符串添加到变量(数组)CSV - > MySQL
【发布时间】:2015-09-05 01:14:40
【问题描述】:

我有一个令我困惑的问题,我无法将从 CSV 文件逐渐加载的字符串添加到写入数据库后的数组(通过 while 循环)。

代码运行,它反映了它已写入数据库的事实,但实际上没有发生任何事情,当我删除它写入数据库的字符串时就很好了。

语法应该是 $变量 = '字符串' 。 $csv值; 在这种情况下它不会写入数据库,但它会在以下情况下写入: $变量 = $csvValue;

代码如下:

<?php
// Script to insert data from a CSV-file with AD information in it to a MySQL database.

// Connect to the database 
$connect = mysqli_connect("localhost","root","password","dbname"); 

if(!$connect){
   die('Could not <span id="IL_AD1" class="IL_AD">
    connect to</span> MySQL: ' . mysql_error());
}

// Charset
mysqli_query($connect, "SET NAMES 'utf8'");

// File path
define('CSV_PATH','/home/administrator/Desktop/'); 

$csvName = CSV_PATH . "AnsattInfo.csv"; // Name of CSV-file
$csvfile = fopen($csvName, 'r');
$theData = fgets($csvfile);
$i = 0;

while(!feof($csvfile)){

    $csv_data[] = fgets($csvfile, 2048);
    $csv_array = explode(",", $csv_data[$i]);
    $insert_csv = array();
    $insert_csv['sAMAccountName'] = $csv_array[0];
    $insert_csv['displayName'] = $csv_array[1];
    $insert_csv['employeeNumber'] = $csv_array[2];
    $insert_csv['mail'] = $csv_array[3];
    $insert_csv['company'] = $csv_array[4];
    $footer = str_replace(' ', '_', $insert_csv['company']);
    //$footer = '@' . str_replace(' ', '_', $insert_csv['company']);

    $query = "INSERT INTO playsms_tblUserTest (status, username, enable_webservices, webservices_ip, name, mobile, email, footer, country, datetime_timezone, language_module, fwd_to_mobile, send_as_unicode)
        VALUES(
            3,
            ".$insert_csv['sAMAccountName'].",
            1,
            '*.*.*.*',
            ".$insert_csv['displayName'].",
            ".$insert_csv['employeeNumber'].",
            ".$insert_csv['mail'].",
            ".$footer.",
            137,
            '+0100',
            'nb_NO',
            1,
            1         
    ) ON DUPLICATE KEY
        UPDATE name = $insert_csv[displayName], mobile = $insert_csv[employeeNumber], email = $insert_csv[mail], footer = $footer";

   mysqli_query($connect, $query);

   $i++;
}

fclose($csvfile);

echo "CSV successfully imported to User-table! \n";

mysqli_close($connect); // closing connection  
?>

我在这里真正想做的是在 $footer 值前面添加一个字符串,因为@是联系人组的组名,其中'@'实际上是它是一个组的指示符。

在 CSV 文件中,公司名称前面没有“@”,这是我要添加的。像这样:

$footer = '@' . str_replace(' ', '_', $insert_csv['company']);

这不会产生任何语法错误,但实际上没有任何内容写入数据库。

这里有人对解决方案有建议吗?

为任何帮助干杯。

【问题讨论】:

  • 这可能是我的愚蠢,您是否尝试在使用@点替换时评论管理页脚的另一行?您是否尝试过调试一下以回显例如 $footer 或 $query?你看到了什么?
  • 当我在 @ 版本的页脚上回显时,我得到如下回显:@"" @"" @"" @@@@@ @"" @所以我想这可能与没有附加公司名称的用户有关,这可能是问题?
  • 好吧,我不知道为什么它在没有连接的情况下对你有用,但是字符串仍然应该在 mysql-queries 中用引号引起来。我的第二个猜测是,如果字符串被识别,php/mysqli 会自动为您添加引号 - 但它不会将 @value 识别为字符串,因为以 @ 开头的单词被视为变量(mysql-variables)在 mysql 中。
  • 我尝试过使用随机字符串以及考虑到低租金,例如我尝试过 $footer = 'asd' 。 str_replace(' ', '_', $insert_csv['company']);
  • @robikar 你能回显$query 变量并发布你的mysql-string最终的样子吗?

标签: php mysql csv mysqli csvtoarray


【解决方案1】:

如果您的数据库中的字段footer 是某种“字符串类型”,那么您还必须用字符串填充它:

/* ... */
            ".$insert_csv['employeeNumber'].",
            ".$insert_csv['mail'].",
            '".$footer."',
            137,
            '+0100',
            'nb_NO',
            1,
            1         
    ) ON DUPLICATE KEY
        UPDATE name = $insert_csv[displayName], mobile = $insert_csv[employeeNumber], email = $insert_csv[mail], footer = '$footer'";
/* ... */

要在 mysql-query 中将其声明为字符串,您必须将其放在引号之间,如上所示,并带有 $footer 值。

我认为您在查询中多次遇到相同的错误: 例如$insert_csv['mail'] 也是一个字符串,我猜。

提示:如果你使用了某种错误处理,那么你会看到有一些 mysql 错误(因为我使用的是 pdo 我真的不知道这是怎么回事工作在mysqli)。

【讨论】:

  • 当尝试添加引号时,例如,我在终端中收到一个语法错误,提示存在意外的 '' (T_ENCAPSED_AND_WHITESPACE)、需要标识符 (T_STRING)、变量 (T_VARIABLE) 或数字 (T_NUM_STRING) .
  • @robikar 很好,那么您在查询字符串中遇到了一些解析错误。但这并不意味着,当您摆脱这些解析错误时,它不会起作用:)
  • 你碰巧看到了这些?我已经链接了整个脚本,我唯一编辑的是数据库连接信息和 $password 变量,它目前只复制用户名作为密码,因为该服务仍处于测试阶段我不担心获取密码以某种方式来自 AD。如果您知道如何将密码“解密”到 AD 以检查密码是否正确。 (我正在处理的服务是在 ubuntu 上,而 AD 服务器显然是基于 Windows 的)我会很感激你的帮助,但现在这不是一个优先事项。
猜你喜欢
  • 2016-01-26
  • 2011-04-03
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 2020-04-12
相关资源
最近更新 更多