2017-09-05 94 views
1

因此,我正在使用數據庫來存儲船舶數據。通過數組循環的問題

當我將數據加載到數據庫中時,我正在檢查船是否已經存在。有時,不止一艘船具有相同的名稱。這段代碼試圖通過這個數組,然後提出所有具有相同名稱的船隻,然後詢問是否合適 - 如果沒有,那麼它又是一個具有相同名稱的船隻。

$sql = "SELECT Ship_Primary_Key, ship_original_rate, Ship_Launch_Year from Ships WHERE Ship_Name = '" . $shipname . "'"; 
$result = $conn->query ($sql); 
if ($result-> num_rows > 0) //Does the ship name already exist in the DB? { 
    $ships_in_db = mysqli_fetch_all ($result,MYSQLI_ASSOC); 
    foreach ($ships_in_db as $row) { 
     echo "new record is " . $shipname . " as a " . $shiprate . ". Records already include " . $shipname . ", launched " . $row["Ship_Launch_Year"] . " as a " . $row ['ship_original_ra 
     $yesno = trim(fread(STDIN,5)); 
     if ($yesno == "y" || $yesno == "yes") { 
      //ship already exists in the DB. Get the Key 
      echo $shipname . " is not new to the database and the key is " . $row["Ship_Primary_Key"] . "\n"; 
      $shipkey = $row["Ship_Primary_Key"]; 
      break 1; 
      } 
     } 

     //if you get through the loop of ships without assigning a primary key, ship is new 
     if (empty($shipkey)) { 
      $shipkey = write_ship_to_DB($shipname,$shiprate,$launchyear,$launchname,$conn); 
     } 
    } 

所以,問題是,我知道我有至少附帶在第一組數據(即不同)的同名。問題是,它只會問第一個問題。當我放上'n'時,它就會繼續,並且從不會詢問與已存在的同名船隻第二艘

我認爲這是Foreach循環和break語句的問題。 我會很感激任何幫助這個

+0

您是否嘗試過'var_dump($ ships_in_db)'來查看數組中的內容? –

+0

如果您嘗試刪除中斷,會發生什麼情況?當你的'yesno'變量傳遞給你的條件後,break語句顯然會停止循環語句,我似乎無法理解你的條件在做什麼。 – Cedric

+0

實際情況似乎已經發生了變化 - 出於某種原因,只有*一個*名稱相同的船隻會返回。我需要調查此問題。 –

回答

0

我已經找到了問題。

由於循環 - 我沒有重置「Ship_Id」變量,這意味着第二次或第n次有同名船隻出現時,沒有創建新船。

現在我已經解決了。所以問題不在於這個代碼 - 它是其他代碼。