[英]PHP check if value exists
I'm trying to write a if
code, but can't figure out how. 我正在尝试编写一个if
代码,但不知道如何做。
In my database table i have the primary key id
. 在我的数据库表中,我有主键id
。 In the table i have objekt_nr
& element_nr
. 在表中,我有objekt_nr
和element_nr
。 Now, before i call an INSTERT
i need to check if objekt_nr
with element_nr
already exist. 现在,在我调用INSTERT
之前,我需要检查是否已经存在带有element_nr
objekt_nr
。 If
objekt_nr
With element_nr
exist. If
objekt_nr
和element_nr
存在。 Then UPDATE
instead of INSTERT
. 然后用UPDATE
代替INSTERT
。 Only id can be unique. 只有ID可以是唯一的。
example of table: 表示例:
id......objekt_nr......element_nr ID ...... objekt_nr ...... element_nr
1.......1...............1 1 ....... 1 ............... 1
2.......1...............2 2 ....... 1 ............... 2
3.......1...............3 3 ....... 1 ............... 3
4.......2...............1 4 ....... 2 ............... 1
5.......2...............2 5 ....... 2 ............... 2
PHP: 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";
}
}
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 ). 1)将“ objekt_nr”字段设为PRIMARY或UNIQUE键,并使用REPLACE
而不是INSERT
( http://dev.mysql.com/doc/refman/5.0/en/replace.html )。 This is pretty much @hd 's answer in the comments. 这几乎是@hd在评论中的答案。
2) Check for an existing "objekt_nr" and "element_nr" and run the appropriate query 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);
EDIT: 编辑:
Just thought of a 3rd option 刚想到第三种选择
Create another field "objekt_element_nr" and set this field to unique. 创建另一个字段“ objekt_element_nr”,并将此字段设置为唯一。 This field gets assigned objekt and element number combination, which from your example should be unique. 此字段分配了对象和元素编号组合,在您的示例中,这应该是唯一的。
eg 1_1, 1_2, 1_3, 2_1, 2_2, etc. 例如1_1、1_2、1_3、2_1、2_2等。
Then simply use the REPLACE
function I linked to above. 然后,只需使用我上面链接的REPLACE
函数即可。
Your $query_params
would look like 您的$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]
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.