【发布时间】:2015-04-14 18:48:06
【问题描述】:
我想尝试设置一些东西,如果用户已经提交了一个部门密钥和当前日期,它将停止插入记录。它会给出一个错误,说重复的记录输入了再试一次。
这是我插入页面的一部分,但它不起作用
$stmt= $db->prepare("INSERT INTO tbl_lighting(Department,
areaCode, offtime, gytime, ftime, ini,
sat_ob_department, sat_ib_department,
sat_ob_onTime,sat_ib_onTime,
sat_ob_offTime, sat_ib_offTime,
ob_signature,ib_signature,
deptkey, comments,ib_comments,ob_comments,Requestdate
) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)WHERE NOT EXISTS
(SELECT * FROM tbl_lighting where deptkey = $deptkey AND Requestdate= CAST(GETDATE() AS DATE)");
$stmt->bindParam(1, $_POST["Department"]);
$stmt->bindParam(2, $_POST["areaCode"]);
$stmt->bindParam(3, $_POST["offtime"]);
$stmt->bindParam(4, $_POST["gytime"]);
$stmt->bindParam(5, $_POST["ftime"]);
$stmt->bindParam(6, $_POST["ini"]);
$stmt->bindParam(7, $_POST["sat_ob_department"]);
$stmt->bindParam(8, $_POST["sat_ib_department"]);
$stmt->bindParam(9, $_POST["sat_ob_onTime"]);
$stmt->bindParam(10, $_POST["sat_ib_onTime"]);
$stmt->bindParam(11, $_POST["sat_ob_offTime"]);
$stmt->bindParam(12, $_POST["sat_ib_offTime"]);
$stmt->bindParam(13, $_POST["ob_signature"]);
$stmt->bindParam(14, $_POST["ib_signature"]);
$stmt->bindParam(15, $_POST["deptkey"]);
$stmt->bindParam(16, $_POST["comments"]);
$stmt->bindParam(17, $_POST["ib_comments"]);
$stmt->bindParam(18, $_POST["ob_comments"]);
$stmt->bindParam(19, $_POST["Requestdate"]);
$stmt->execute();
这是我的提交表单
<form action = "insert_process.php" onsubmit="return validateForm()" name="form" id="form" method ="post" class="style1">
<table align="center" id="tfhover" class="tftable" border="1">
<br><br>
<tr>
<td colspan="7"><h1 align="center">Lighting Schedule Form</h1></td>
</tr>
<tr>
<th>Department</th><th style="width: 75px">Area Code</th><th style="width: 144px">Off Time</th><th>Grave Yard On Time</th><th>First Shift OnTime</th><th width="125px">Comments Or Date By</th><th>Initials</th></tr>
<tr>
<!--First row accross on the table-->
<td><select name="Department" id="Department" >
<option value ="">Please select ...</option>
<option value ="Upstairs Hang East">Upstairs Hang East</option>
<option value ="Upstairs Hang West">Upstairs Hang West</option>
<option value ="RDR">RDR</option>
</select></td>
<td style="width: 75px"><input id="areaCode" name="areaCode" onkeydown="return false;" type="text"/></td>
<td style="width: 144px"><input class="offtime" id="offtime" name="offtime" type="text" /></td>
<td><input id="gytime" name="gytime" type="text"></td>
<td><input id="ftime" name="ftime" type="text" ></td>
<td><input id="comments" name="comments" type="text"></td>
<td><input id="ini" name="ini" type="text" style="width: 68px" /></td>
</tr>
<input id="deptkey" name="deptkey" onkeydown="return false;" type="hidden"/>
<!--end-->
【问题讨论】:
-
“如何使用 PDO 防止重复记录插入” - 不是检查一大堆代码,而是在给定列上设置唯一约束,不是吗?
-
stackoverflow.com/questions/4596390/… 创建唯一的配对密钥。
-
旁注:您确实有结束
</form>标记,对吗?另外,你也有一些 JS 发生;很难说这是否是问题的一部分。 -
连接打开后立即添加
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);。将错误报告添加到您的打开 PHP 标记(例如<?php error_reporting(E_ALL); ini_set('display_errors', 1);)之后的文件顶部,然后是其余代码,以查看它是否产生任何结果。这是为了检查您可能遇到的可能错误,因为您可能没有检查它们而没有看到它们。 -
正确的做法是添加唯一约束,插入和在重复记录的情况下 - 捕获异常并通知用户。 没有其他可能的正确方法。 @Fred-ii- 告诉你的是你是怎么做的。唯一约束 + 异常模式下的 PDO。
标签: php html sql-server pdo