2015-06-19 56 views
0

我有一個問題,只是莫名其妙,我無法添加從CSV文件逐漸加載到一個數組的字符串(通過一段時間循環)寫入數據庫之後。PHP - 爲變量(數組)添加一個字符串CSV - > MySQL

代碼運行時,它迴應了它已寫入數據庫的事實,但實際上沒有發生任何事情,因爲我刪除了寫入數據庫的字符串就好了。

語法應該是 $ variable ='string'。 $ csvValue; 當這種情況發生時,它不會寫入數據庫,但它會在以下時間發生: $ variable = $ 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 
?> 

我真的想在這裏做的是添加一個字符串盈方$頁腳值,因爲@是一個聯絡小組,其中的組名「@」實際上是它是一個組的指標。

在CSV文件中,公司名稱沒有「@」,它是我想要添加的。像這樣:

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

這不會給出任何語法錯誤,但實際上沒有任何數據寫入數據庫。

有沒有人在這裏有一個解決方案的建議?

乾杯任何幫助。

+0

可能是我笨的,你用@ dot替換時你試過評論管理頁腳的其他行嗎?你有沒有嘗試調試一些回聲作爲示例$ footer或$查詢?你看到什麼了? – Goikiu

+0

當我呼應的頁腳我得到呼應這樣的@版本: @ 「<公司名稱>」 @ 「<公司名稱>」 @ 「<公司名稱>」 @ @ @@@ @「<公司名稱>」 @ 所以我想這可能與用戶沒有連接到公司名稱可能是問題的用戶有關? – robikar

+0

好吧,我不知道爲什麼它在沒有連接的情況下爲你工作,但字符串仍然應該在mysql-queries中加引號。我的第二個猜測是,如果一個字符串被識別,那麼php/mysqli會自動爲你引用引號 - 但它不會將'@ value'識別爲字符串,因爲以'@'開頭的字被認爲是變量(mysql-variables )在MySQL中。 –

回答

2

如果你的數據庫中的字段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查詢字符串你必須把它放在如上所示的引號和$footer值之間。

我想你在查詢中多次出現同樣的錯誤: 例如$insert_csv['mail']也是一個字符串,我猜。

提示:如果使用某種錯誤處理,然後你會看到有一些MySQL的錯誤(因爲我使用pdo我真的不知道這是如何工作的mysqli)。

+0

當試圖添加引號到例如我得到在中,終端中出現語法錯誤,說明意外的''(T_ENCAPSED_AND_WHITESPACE),期待標識符(T_STRING)或變量(T_VARIABLE)或數字(T_NUM_STRING)。 – robikar

+0

@robikar,那麼你在查詢字符串中得到了一些分析錯誤。但這並不意味着,當你擺脫那些解析錯誤時它不會工作:) –

+0

你碰巧看到這些嗎?我鏈接了整個腳本,只有編輯出來的是db連接信息以及$ password變量,它目前只將用戶名作爲密碼複製,因爲此服務仍處於測試階段我不擔心取回密碼不知何故來自AD。如果您有任何有關如何將密碼「解密」至AD以檢查密碼是否正確的線索。 (我工作的服務是在Ubuntu上,而AD服務器顯然是基於Windows的)我很感激這個幫助,但那不是現在的prio。 – robikar