0

私はちょうど疑問に思っています: エントリが存在しない場合、「UPDATE」も「更新」を行いますか? 次のコードを使用すると、特に「WHERE」でメールが見つからない場合、if ステートメントは常に「成功」​​します。電子メールがテーブルに存在するかどうかを確認する必要がありますか?

$email=...;
if ($update_stmt = $mysqli->prepare("UPDATE members SET password = ?, salt = ? WHERE email='".$email."'"))
         {
         $update_stmt->bind_param('ss', $password, $random_salt);

         $update_stmt->execute()
         header("Location: ...?success=1");
         }
         else
            header("Location: ...?error=1");

提案をありがとう。

4

3 に答える 3

1

これは、一致が存在するかどうかに関係なくリダイレ​​クトするためです。

$update_stmt->execute()
if($update_stmt->affected_rows != 0)
{
    header("Location: ...?success=1");
}
else
{   
    header("Location: ...?error=1");
}

またif、クエリの前にそれを削除するため、最終的なコードは次のようになります

$update_stmt = $mysqli->prepare("UPDATE members SET password = ?, salt = ? WHERE email='".$email."'"))
$update_stmt->bind_param('ss', $password, $random_salt);
$update_stmt->execute()
if($update_stmt->affected_rows != 0)
{
    header("Location: ...?success=1");
}
else
{   
    header("Location: ...?error=1");
}
于 2013-04-22T07:01:04.413 に答える
0

前の操作によって影響を受けた行数を取得する必要があります。これは によって提供されaffected_rowsます。

if ($mysqli->affected_rows == 1)
{
   echo 'A record was deleted';
}
于 2013-04-22T07:01:40.103 に答える
0
$email=...;
$mysqli->prepare("UPDATE members SET password = ?, salt = ? WHERE email='".$email."'"))
$update_stmt->bind_param('ss', $password, $random_salt);
$update_stmt->execute();

if ($update_stmt->affected_rows > 0){
   header("Location: ...?success=1");
         }
else
   header("Location: ...?error=1");
于 2013-04-22T07:09:48.180 に答える