0

関数を呼び出して mysqli データベースを更新し、エラーが発生した場合は報告しようとしています。これまでのところ、テストファイルにこれがあります:

<?php

$success = test("cat",17);
echo $success;
echo "<br />";


function test($name, $number){
    $db = new mysqli("localhost","root","","test");
    if($db->connect_errno){
        return "Failed to connect to MYSQL Database: [" . $db->connect_errorno . "]" . $db->connect_error;
    }
    if(!($stmt = $db->prepare("UPDATE `test` SET `name` = ? WHERE `number` = ?"))){
        return "prepare failed: [" . $db->errno . "]" . $db->error;
    }
    if(!($stmt->bind_param('si', $name, $number))){
        return "bind failed: [" . $db->errno . "]" . $db->error;
    }
    if(!($stmt->execute())){
        return "execute failed: [" . $db->errno . "]" . $db->error;
    }
    $stmt->close();
    return "Successfully updated database!";
}

?>

そして、私がそこに持っているテスト(cat、17)では、17の数字の列がなくても成功を返し、データベースに何も変化が見られません。WHERE 句で番号が見つからない場合、失敗を適切に返すにはどうすればよいですか?

4

1 に答える 1

2

execute()完了したら、 が 0 より大きいことを確認します$stmt->affected_rows

if(!($stmt->execute())){
    return "execute failed: [" . $db->errno . "]" . $db->error;
}

if(!$stmt->affected_rows) {
    return "no rows updated";
}
于 2013-05-07T17:31:20.920 に答える