2014-10-28 122 views
0

我试图编写if代码,但无法弄清楚。PHP检查是否存在值

在我的数据库表中我有主键id。 在表中我有objekt_nr & element_nr。 现在,在我致电INSTERT之前,我需要检查objekt_nrelement_nr是否已经存在。 Ifobjekt_nr存在element_nr。然后UPDATE而不是INSTERT。只有id可以是唯一的。表中的

例如:

ID ...... objekt_nr ...... element_nr

1 ....... 1 .......... ..... 1

2 ....... 1 ............... 2

3 ....... 1 .. ............. 3

4 ....... 2 ............... 1

5 ....... 2 ............... 2

PHP:这里

if(isset($_POST["Import"])){ 
echo '<a href=".php">Fortsätt...</a><br />'; 
echo $path=$_FILES["file"]["tmp_name"]; 

//Load file into PHPExcel 
$objPHPExcel = PHPExcel_IOFactory::load($path); 

//Loop threw file to get data 
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { 
    $worksheetTitle  = $worksheet->getTitle(); 
    $highestRow   = $worksheet->getHighestRow(); // e.g. 10 
    $highestColumn  = 'J'; //$worksheet->getHighestColumn(''); // e.g 'F' 
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
    $nrColumns = ord($highestColumn) - 64; 

//Echo file info 
echo "<br>The worksheet ".$worksheetTitle." has "; 
echo $nrColumns . ' columns (A-' . $highestColumn . ') '; 
echo ' and ' . $highestRow . ' row.'; 
echo '<br>Data: <table border="1"><tr>'; 

//Loop threw colum, rows and cells 
for ($row = 2; $row <= $highestRow; ++ $row) { 
    echo '<tr>'; 
    for ($col = 0; $col < $highestColumnIndex; ++ $col) { 
     $cell = $worksheet->getCellByColumnAndRow($col, $row); 
     $val = $cell->getCalculatedValue(); 
     //$dataType = PHPExcel_Cell_DataType::dataTypeForValue($val); 
     echo '<td>' . $val . '<br></td>'; 
    } 
    echo '</tr>'; 
} 
echo '</table>'; 
} 

for ($row = 2; $row <= $highestRow; ++ $row) { 
$val=array(); 
for ($col = 0; $col < $highestColumnIndex; ++ $col) { 
$cell = $worksheet->getCellByColumnAndRow($col, $row); 
$val[] = $cell->getCalculatedValue(); 
} 
// Prepare Query 
    $query = "INSERT INTO phpexcel(
       objekt_nr, 
       objekt_rev, 
       element_nr, 
       element_hojd, 
       element_typ, 
       element_langd, 
       element_oppningar, 
       element_vikt, 
       element_ritare, 
       element_status) 
      VALUES ( 
      :objekt_nr, 
      :objekt_rev, 
      :element_nr, 
      :element_hojd, 
      :element_typ, 
      :element_langd, 
      :element_oppningar, 
      :element_vikt, 
      :element_ritare, 
      :element_status 
     )"; 

    // Security measures 
    $query_params = array( 
     ':objekt_nr' => $val[0], 
     ':objekt_rev' => $val[1], 
     ':element_nr' => $val[2], 
     ':element_hojd' => $val[3], 
     ':element_typ' => $val[4], 
     ':element_langd' => $val[5], 
     ':element_oppningar' => $val[6], 
     ':element_vikt' => $val[7], 
     ':element_ritare' => $val[8], 
     ':element_status' => $val[9] 
    ); 
    try { 
     $stmt = $db->prepare($query); 
     $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 


//echo $query."\n"; 
} 
} 
+4

'INSERT INTO ... ON DUPLICATE KEY UPDATE'?假设'objeckt_nr'是关键。 http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – 2014-10-28 09:13:28

+0

@ʰᵈˑ绝对是最简单的解决方案,但值得指出的是它是一个MySQL扩展(非标准的sql) – 2014-10-28 09:16:00

+0

@TimSeguine这可能与MySQL - 我不确定你在说什么。 – 2014-10-28 09:17:00

回答

1

两个选项。

1)使“objekt_nr”字段成为PRIMARY或UNIQUE密钥,并使用REPLACE而不是INSERThttp://dev.mysql.com/doc/refman/5.0/en/replace.html)。这几乎是@hd在评论中的回答。

2)检查现有的 “objekt_nr” 和 “element_nr”,并运行相应的查询

$check_duplicate_query = "SELECT COUNT(*) FROM phpexcel WHERE objekt_nr = ':objekt_nr' AND element_nr = ':element_nr'"; 
$stmt = $db->prepare($check_duplicate_query); 
$result = $stmt->execute($query_params); 
$rows = $stmt->fetch(PDO::FETCH_NUM); 

if($rows[0] > 0) { 
    //UPDATE 
} else { 
    //INSERT 
} 

$stmt = $db->prepare($query); 
$result = $stmt->execute($query_params); 

编辑:

只是觉得一个第三选择

创建另一个领域的“objekt_element_nr “并将此字段设置为唯一。 这个字段被赋值为对象和元素号码组合,它们在你的例子中应该是唯一的。

例如1_1,1_2,1_3,2_1,2_2等

然后,只需使用REPLACE函数我链接到上面。

$query_params会是什么样子

$query_params = array( 
     ':objekt_nr' => $val[0], 
     ':objekt_rev' => $val[1], 
     ':element_nr' => $val[2], 
     ':objekt_element_nr' => $val[0].'_'.$val[2] 
     ':element_hojd' => $val[3], 
     ':element_typ' => $val[4], 
     ':element_langd' => $val[5], 
     ':element_oppningar' => $val[6], 
     ':element_vikt' => $val[7], 
     ':element_ritare' => $val[8], 
     ':element_status' => $val[9] 
    ); 
+0

@ConnectedSystemes I不能使'objekt_nr'唯一,因为两个'element_nr'具有相同的'objekt_nr'。 'element_nr'可以是唯一的。但是我需要匹配..如果带'element_nr'的'objekt_nr'存在,然后更新它。 – N1CKN4M3 2014-10-28 09:42:00

+0

查看我的更新回答请 – ConnectedSystems 2014-10-28 09:42:40

+0

@ConnectedSystemes谢谢!我会尝试这个并回来!我也更新了我的解释问题! (我错了elemenr_nr的唯一性,只有id可以是唯一的!) – N1CKN4M3 2014-10-28 09:48:00