espero que esto te ayude,
<?php
include_once "conexion.php";
try {
$pdo->beginTransaction();
$result = $pdo->exec("insert into users (name, last_name, email, password) values ('Juan Leo', 'Juan leo/','juan@correo.com','123445')");
$result = $pdo->exec("insert into users (name, last_name, email, password) values ('Laura', 'lau/','laura@correo.com','123445')");
if($result > 0){
echo "Datos agregados! :)";
}
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "Fallo: " . $e->getMessage();
}
?>
Esta es una forma haciendolo con transacciones,
y esta es con el uso de ajax,
<?php
include_once "conexion.php";
if(isset($_POST)){
if(isset($_POST['name']) &&
isset($_POST['last_name']) &&
isset($_POST['email']) &&
isset($_POST['password'])){
$nombre = $_POST['name'];
$last_name = $_POST['last_name'];
$email = $_POST['email'];
$password = $_POST['password'];
$respuesta;
//Ejecutar una sentencia preparada vinculando varialbes de PHP
$hash = password_hash( $password, PASSWORD_DEFAULT );
$gsent = $pdo->prepare('INSERT INTO users (name, last_name, email, password)
VALUES (:name,:last_name,:email,:password)');
$gsent->bindParam(':name', $nombre, PDO::PARAM_STR);
$gsent->bindParam(':last_name', $last_name, PDO::PARAM_STR);
$gsent->bindParam(':email', $email, PDO::PARAM_STR);
$gsent->bindParam(':password', $hash, PDO::PARAM_STR);
$state= $gsent->execute();
$pdo= null;
if($state){
$respuesta = array("estado"=>true, "mensaje"=>"Datos ingresados Correctamente!");
}
else{
$respuesta = array("estado"=>false, "mensaje"=>"Error al ingresar los datos!");
}
echo json_encode($respuesta);
}
}
?>
En si, los datos los cuales no se debn de repetir son los identificadores o llaves primarias, de cada tabla. podria ser auto incremental, ahora podria decirse que si existe algun registro, por ejemplo una tabla usuarios, no quieres que los nombres de usuario se repitan, podrias realizar primero un select y si existe un nombre similar, que le indique ese nombre ya esta ocupado, de lo contrario, que inserte el valor..
Espero te ayude..