Netbeans Xdebug:mysqli_affected_rows返回" -1"什么时候应该" 1"

时间:2014-05-24 18:36:53

标签: php netbeans mysqli rows-affected

我很困惑为什么下面的代码成功地向我的数据库表添加了一行,而mysqli_affected_rows($dbc)返回" -1",因此在signup.php中出现错误:

dbc.inc.php:

DEFINE ('DB_USER', 'root');
DEFINE ('DB_PASSWORD', '');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'v');


$dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Error connecting to MySQL server.');

mysqli_set_charset($dbc, 'utf8');

signup.php:

require('dbc.inc.php');

//code to set variables for the following SQL statement

$q = "INSERT INTO users (username, email, pass, first_name, last_name, sex, birth_day, birth_month, birth_year, phone, street, street_nr, city, zip_code, country, user_img) VALUES ('$u', '$e', '$p', '$fn', '$ln', '$sex', '$bd', '$bm', '$by', '$pn', '$st', '$sn', '$cit', '$pc', '$ct', '$user_img')";
$r = mysqli_query($dbc, $q) or die(msg(0, "Error connecting to the database"));

if (mysqli_affected_rows($dbc) === 1) { //Returns 'false' despite one row having been added...
echo "Success";
}
else {
echo "Error"; //...resulting in "Error" being echoed
}

出于测试目的:SQL创建表"用户":

CREATE TABLE IF NOT EXISTS `v`.`users` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `type` ENUM('member','admin') NOT NULL DEFAULT 'member',
  `username` VARCHAR(45) NOT NULL,
  `email` VARCHAR(80) NOT NULL,
  `pass` VARCHAR(255) NOT NULL,
  `first_name` VARCHAR(45) NOT NULL,
  `last_name` VARCHAR(45) NOT NULL,
  `sex` CHAR(1) NOT NULL,
  `birth_day` INT NOT NULL,
  `birth_month` INT NULL,
  `birth_year` INT NULL,
  `phone` VARCHAR(20) NULL,
  `street` VARCHAR(60) NOT NULL,
  `street_nr` VARCHAR(9) NOT NULL,
  `city` VARCHAR(45) NOT NULL,
  `zip_code` VARCHAR(45) NOT NULL,
  `country` VARCHAR(45) NOT NULL,
  `user_img` VARCHAR(65) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `username_UNIQUE` (`username` ASC),
  UNIQUE INDEX `email_UNIQUE` (`email` ASC),
  INDEX `login` (`email` ASC, `pass` ASC))
ENGINE = InnoDB
AUTO_INCREMENT = 4
DEFAULT CHARACTER SET = utf8;

我非常感谢你的暗示!

修改 与此同时,我能够进一步隔离问题:代码可以直接在Web浏览器中运行,它只是在Netbeans / Xdebug中,mysqli_affected_rows($dbc)在相应行中首先正确返回&#34 ; 1",但在踩到下一行(F7)后突然变为" -1"因此错误地跳转到"否则" -branch返回错误,尽管数据已正确写入数据库。 Apparently I'm not the only one having this problem

这些是我在php.ini中的Xdebug设置,但我认为它们是正确的。

zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
;xdebug.profiler_append = 0
xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
xdebug.remote_port = 9000
;xdebug.trace_output_dir = "C:\xampp\tmp"

任何人的线索?

1 个答案:

答案 0 :(得分:0)

我已经测试了你的代码并且当新记录插入数据库时​​它回应成功,请重新检查你的数据库以确保数据插入

mysqli_affected_rows:返回值

    - An integer > 0 indicates the number of rows affected. 
    - 0 indicates that no records where affected &
    -1 indicates that the query returned an error(that may be you case)