num_rows - php mysqli update affected rows
Netbeans Xdebug: mysqli_affected_rows devuelve "-1" cuando deberÃa ser "1" (1)
He probado su código y muestra el éxito cuando se inserta un nuevo registro en la base de datos. Vuelva a verificar su base de datos para garantizar la inserción de datos.
mysqli_affected_rows: valor de retorno
- 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)
Me sorprende por qué el siguiente código agrega con éxito una nueva fila a mi tabla de base de datos, mientras que mysqli_affected_rows($dbc)
devuelve "-1", por lo tanto un error, en 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
}
Para fines de prueba: SQL para crear "usuarios" de tablas:
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;
¡Estaría muy agradecido por tus sugerencias!
EDITAR: Mientras tanto, he podido aislar el problema un poco más: el código funciona bien directamente en un navegador web, es solo en Netbeans / Xdebug que mysqli_affected_rows($dbc)
en la línea correspondiente primero devuelve "1" correctamente, pero después de entrar en la siguiente línea (F7) cambia repentinamente a "-1" y, por lo tanto, salta erróneamente a la rama "else" devolviendo un error, aunque los datos se escriben correctamente en la base de datos. Aparentemente no soy el único que tiene este problema .
Estas son mis configuraciones de Xdebug en php.ini, pero creo que son correctas.
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"
¿Alguna pista de alguien?