douxin2011 2014-10-28 09:09
浏览 32
已采纳

PHP检查值是否存在

I’m trying to write a if code, but can't figure out how.

In my database table i have the primary key id. In the table i have objekt_nr & element_nr. Now, before i call an INSTERT i need to check if objekt_nr with element_nr already exist. If objekt_nr With element_nr exist. Then UPDATE instead of INSTERT. Only id can be unique.

example of table:

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."
";
}
}
  • 写回答

1条回答 默认 最新

  • dounao1875 2014-10-28 09:36
    关注

    Two options here.

    1) Make "objekt_nr" field a PRIMARY or UNIQUE key and use REPLACE instead of INSERT (http://dev.mysql.com/doc/refman/5.0/en/replace.html). This is pretty much @hd 's answer in the comments.

    2) Check for an existing "objekt_nr" and "element_nr" and run the appropriate query

    $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); 
    

    EDIT:

    Just thought of a 3rd option

    Create another field "objekt_element_nr" and set this field to unique. This field gets assigned objekt and element number combination, which from your example should be unique.

    e.g. 1_1, 1_2, 1_3, 2_1, 2_2, etc.

    Then simply use the REPLACE function I linked to above.

    Your $query_params would look like

    $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]
        ); 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP