当使用NetBeans调试PHP脚本来修改表记录时,';affected_rows';将从1更改为-1


When using NetBeans to debug PHP script to modify table records, 'affected_rows' will change from 1 to -1

我正在测试一个简单的PHP MySQL脚本,它将从表中删除一条记录。奇怪的是在这个代码块中:

// Check if the form has been submitted:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($_POST['sure'] == 'Yes') { // Delete the record.
        // Make the query:
        $q = "DELETE FROM users WHERE user_id=$id LIMIT 1";     
        $r = @mysqli_query ($dbc, $q);
        if (mysqli_affected_rows($dbc) == 1) { // If it ran OK.

当我使用NetBeans调试这个脚本时,在记录被删除后($r=@mysqli_query($dbc,$q)被执行),NetBeans的变量部分中的affected_rows=1,这是正确的。但是,当我按F7进入并执行"if(mysqli_affected_rows($dbc)==1)"后,affected_rows突然变为-1,程序逻辑跳到错误报告分支。

如果我不调试,只是运行脚本,删除是完全可以的。可能的原因是什么?

以下是整个脚本:

    <?php # Script 10.2 - delete_user.php
// This page is for deleting a user record.
// This page is accessed through view_users.php.
$page_title = 'Delete a User';
include ('includes/header.html');
echo '<h1>Delete a User</h1>';
// Check for a valid user ID, through GET or POST:
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // From view_users.php
    $id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) { // Form submission.
    $id = $_POST['id'];
} else { // No valid ID, kill the script.
    echo '<p class="error">This page has been accessed in error.</p>';
    include ('includes/footer.html'); 
    exit();
}
require ('./mysqli_connect.php');
// Check if the form has been submitted:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($_POST['sure'] == 'Yes') { // Delete the record.
        // Make the query:
        $q = "DELETE FROM users WHERE user_id=$id LIMIT 1";     
        $r = @mysqli_query ($dbc, $q);
        if (mysqli_affected_rows($dbc) == 1) { // If it ran OK.
            // Print a message:
            echo '<p>The user has been deleted.</p>';   
        } else { // If the query did not run OK.
            echo '<p class="error">The user could not be deleted due to a system error.</p>'; // Public message.
            echo '<p>' . mysqli_error($dbc) . '<br />Query: ' . $q . '</p>'; // Debugging message.
        }
    } else { // No confirmation of deletion.
        echo '<p>The user has NOT been deleted.</p>';   
    }
} else { // Show the form, to confirm that this user should be deleted.
    // Retrieve the user's information:
    $q = "SELECT CONCAT(last_name, ', ', first_name) FROM users WHERE user_id=$id";
    $r = @mysqli_query ($dbc, $q);
    if (mysqli_num_rows($r) == 1) { // Valid user ID, show the form. (Just 1 result as user_id is PK)
        // Get the user's information:
        $row = mysqli_fetch_array ($r, MYSQLI_NUM);
        // Display the record being deleted:
        echo "<h3>Name: $row[0]</h3>
        Are you sure you want to delete this user?";
        // Create the form:
        echo '<form action="delete_user.php" method="post">
    <input type="radio" name="sure" value="Yes" /> Yes 
    <input type="radio" name="sure" value="No" checked="checked" /> No
    <input type="submit" name="submit" value="Submit" />
    <input type="hidden" name="id" value="' . $id . '" />
    </form>';
    } else { // Not a valid user ID.
        echo '<p class="error">This page has been accessed in error.</p>';
    }
} // End of the main submission conditional.
mysqli_close($dbc);
include ('includes/footer.html');
?>

另一个问题是,在运行脚本后,会出现许多行警告:

 Warning: main(): Couldn't fetch mysqli in C:'xampp'htdocs'phpmysql4_working'delete_user.php on line 75
 Warning: main(): Couldn't fetch mysqli in C:'xampp'htdocs'phpmysql4_working'includes'footer.html on line 11
Call Stack
#   Time    Memory  Function    Location
1   0.1000  146128  {main}( )   ..'delete_user.php:0
2   249.5054    187032  include( 'C:'xampp'htdocs'phpmysql4_working'includes'footer.html' ) ..'delete_user.php:75

但MySQL实际上已经成功访问。页脚.html是:

    <!-- End of the page-specific content. --></div>
    <div id="footer">
        <p>Copyright &copy; <a href="#">Plain and Simple</a> 2007 | 
            Designed by <a href="http://www.edg3.co.uk/">edg3.co.uk</a> | 
            Sponsored by <a href="http://www.opendesigns.org/">Open Designs</a> | 
            Valid <a href="http://jigsaw.w3.org/css-validator/">CSS</a> &amp; <a href="http://validator.w3.org/">XHTML</a></p>
    </div>
</body>
</html>

我进行了调查,发现这不是Xdebug做错的事情,而是MySQLi扩展本身。我在上提交了一份PHP错误报告https://bugs.php.net/bug.php?id=67348