我试图在提交重复条目时验证并向用户显示消息。此外,每当用户第一次注册时,我都会使用此验证在我的数据库中生成一个条目。我知道我的代码可能会被SQL注入攻陷,但我在此练习中并不担心。
我的桌子有一个主键" RUT",它是唯一的。我需要验证用户是否已在数据库中提交RUT。
代码:
$datos;
@$db = mysqli_connect("localhost","root","","speedomart");
if($db){
$sql = "insert into cliente values('".$rut."','".$nombre."','".$apellido."','".$correo."','".$pass."')";
$query = $db->prepare($sql);
$query ->execute();
if(mysql_errno() == 1062){
$datos = array('mensaje' => "no fue posible insertar datos");
echo json_encode($datos);
}
else{
$sql2 = "insert into carrito values(NULL,'".$rut."')";
$query = $db->prepare($sql2);
$query ->execute();
$datos = array('mensaje' => "Registrado correctamente");
echo json_encode($datos);
};
}
else{
$datos = array('mensaje' => "No hay conexion.");
echo json_encode($datos);
};
答案 0 :(得分:0)
我假设这是不能重复的电子邮件。因此,当您提交表单时,您可以先使用特定的电子邮件ID选择数据,如下所示:
Comparator
答案 1 :(得分:0)
IF (SELECT 1 = 1 FROM Table WHERE FieldValue='') THEN
--record exists, get ID you need.
BEGIN
SELECT TableID FROM Table WHERE FieldValue='';
END;
ELSE
BEGIN
INSERT INTO Table (FieldValue) VALUES('');
SELECT LAST_INSERT_ID() AS TableID;
END;
END IF;
答案 2 :(得分:0)
两条评论:
(1)如果“数据的本质是”任何字段或字段的特定组合都不应重复,那么您应该应该定义一个UNIQUE
索引,以便SQL绝不允许以任何方式插入重复项。 (如果现在存在任何重复项,您将无法创建这样的索引。)这是SQL会为您强制执行的“数据完整性规则”。
(2)此处很容易避免SQL注入,您应该始终这样做。只需在您的SQL查询文本中使用 parameters :?
(不带引号...这不是一个字符的文字字符串)。现在,每次执行准备好的SQL时,您只需提供一个参数值替换数组。这些参数将按出现顺序从左到右替换。这不仅避免了注入问题,而且效率更高:不必每次都重新准备该语句。请一直养成经常这样做的习惯……您会很高兴的。