私のmysqlデータベースでは、私は「電子メール」フィールドをユニーク制約として設定しました。 2人以上のユーザーが同じ電子メールアドレスを持つことは望ましくありません。私はそれを確認するためにこの関数を作成しました。別のユーザーが同じアドレスを使用しようとすると、その機能が実行されるだけです。QLSTATE [23000]を投げるユニークな制約:整合性制約違反:1062ユニーク制約のため重複します
<?php
function Email_gogo() {
if(!empty($_POST['email']))
{
$mysql_hostname = '*****';
$mysql_username = '*****';
$mysql_password = '*****';
$mysql_dbname = '*****';
try {
$db= new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", `enter code here`$mysql_username, $mysql_password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
exit($e->getMessage());
}
$query_email = "
SELECT
email
from users
where
email = :email
";
$query_goes = array(
':email' => $_POST['email']
);
Try{
$stmt = $db->prepare($query_email);
$stmt ->execute($query_goes);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
}
}
catch(PDOException $ex){
echo 'ERROR: '. $ex->getMessage();
}
if($stmt->rowCount() > 0){
echo("That Email is already in use...");
}
}
}
?>
この機能は、管理者がユーザー名、電子メール、姓を確認できるスクリプトで呼び出されます。ユーザー名は変更できません。これは私が更新したスクリプトです。これはスクリプトです:
<?php
require("common.php");
require_once("gogo.php");
if(empty($_SESSION['user']))
{
header("Location: ../hound/login.php");
die("Redirecting to ../hound/login.php");
}
if(!empty($_POST))
{
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
die("Please enter a valid email address...");
}
}
Email_gogo();
$array_value = array(
':email' => $_POST['email'],
':first_name' => $_POST['first_name'],
':last_name' => $_POST['last_name'],
':id' => $_POST['id']
);
$query = "UPDATE users
SET
email = :email,
first_name = :first_name,
last_name = :last_name
WHERE
id = :id
";
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($array_value);
}
catch(PDOException $ex)
{
die("Ouch, failed to run query: " . $ex->getMessage());
}
header("Location: users.php");
die("Redirecting to users.php");
?>
これはエラーです。この電子メールは既に(関数から)使用されています。電子メールが使用中かどうかを確認しますが、別のエラーが発生します:
Ouch, failed to run query: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicata du champ '[email protected]' pour la clef 'email'
(このエラーはスクリプトからのものです)。
スクリプトの途中で関数を呼び出しました。私の問題は、私がその関数を使うべきかどうかということであり、ユーザが同じアドレスを使用しようとしたときにだけ実行するようにしなければならない。前もって感謝します。
http://stackoverflow.com/questions/18643648/mysql-insert-query-returns-error-1062-23000-duplicate-entry-2147483647-for – daremachine