Php stmt filas afectadas
Base de datos::RETURN_AFFECTED: Devuelve el número de filas afectadas por una consulta UPDATE o DELETE. Tenga en cuenta que esto significa el número de filas realmente cambiadas, no el número de filas coincidentes con la cláusula WHERE.
Asegúrese de que MySQL devuelve todas las filas coincidentes en consultas de actualización, incluyendo las filas que realmente no tuvieron que ser actualizadas porque los valores no cambiaron. Esto coincide con el comportamiento común de otros sistemas de bases de datos.
Este problema está siendo revisado por la amable gente en Slack, #need-reveiw-queue. Estamos trabajando para mantener el tamaño de la cola de Revisión de Necesidades [2700+ cuestiones] a alrededor de 200, siguiendo Revisar un parche o fusionar requieren como guía.
Me preocupaba cómo el comentario podía ser tan erróneo que dijera lo contrario de lo que es cierto. Rastreé el comentario con git log -L hasta la introducción de la API de base de datos D7, en #225450-126: Database Layer: The Next Generation:
En cuanto a insertar-o-actualizar, hay una limitación en el controlador PDO de MySQL que nos impide configurar las sentencias de actualización para devolver el número de filas coincidentes en lugar del número de afectados. Eso significa que *no podemos* usar la lógica if (!update()) { insert(); } a la que estamos acostumbrados, porque establecer una variable al mismo valor que ya tiene devolverá 0, por lo que la sentencia if pasa, así que intentamos insertar y obtenemos un error. Es una putada, pero no conozco otra alternativa.
¿Cómo obtener las filas afectadas en MySQL?
mysql_affected_rows() puede ser llamada inmediatamente después de ejecutar una sentencia con mysql_real_query() o mysql_query() . Devuelve el número de filas cambiadas, borradas o insertadas por la última sentencia si fue un UPDATE , DELETE o INSERT . Para sentencias SELECT, mysql_affected_rows() funciona como mysql_num_rows() .
¿Cómo obtener el número de filas afectadas en SQL Server en PHP?
Para la mayoría de las bases de datos, PDOStatement::rowCount() no devuelve el número de filas afectadas por una sentencia SELECT. En su lugar, use PDO::query() para emitir una sentencia SELECT COUNT(*) con los mismos predicados que la sentencia SELECT deseada, y luego use PDOStatement::fetchColumn() para recuperar el número de filas coincidentes.
¿Qué es la función Mysqli_affected_rows en PHP?
La función affected_rows / mysqli_affected_rows() devuelve el número de filas afectadas en la consulta SELECT, INSERT, UPDATE, REPLACE o DELETE anterior.
Misql_filas_afectadas
Genial, usando MySQL5, la única forma de obtener el número de filas después de hacer una consulta SELECT con PDO es ejecutar una consulta SELECT COUNT(*) separada (o hacer count($stmt->fetchAll()), lo que parece una ridícula pérdida de tiempo de programación.Otra queja que tengo sobre PDO es su incapacidad para obtener el valor de los parámetros de salida de los procedimientos almacenados en algunos DBMSs, como SQL Server.No estoy seguro de que me guste PDO todavía.
Tenga en cuenta que una sentencia INSERT … ON DUPLICATE KEY UPDATE no es una sentencia INSERT, rowCount no devolverá el número de filas insertadas o actualizadas para tal sentencia. Para MySQL, devolverá 1 si la fila es insertada, y 2 si es actualizada, pero esto puede no aplicarse a otras bases de datos.
MySQL no parece devolver nada en rowCount para una sentencia select, pero se puede obtener fácil y eficientemente el número de filas de la siguiente manera: class db extends PDO { public function last_row_count() { return $this->query(“SELECT FOUND_ROWS()”)->fetchColumn(); }}$myDb = new db(‘mysql:host=myhost;dbname=mydb’, ‘login’, ‘password’ );Entonces, después de ejecutar tu consulta:if ( $myDb->last_row_count() == 0 ) { echo “¡Haz algo!”; }
Num_ filas php
Todo se ejecuta a través de \Illuminate\Database\Connection::runQueryCallback que ejecuta una llamada de retorno para ejecutar la consulta y por lo tanto cualquier declaración utilizada está fuera del alcance de donde logQuery está siendo llamado.
Hay un método público \Illuminate\Database\Connection::affectingStatement que de hecho utiliza rowCount pero lo devuelve como resultado directamente, así que no es lo que estamos buscando. Todas las demás sentencias PDO se gestionan a través de los callbacks (por ejemplo cursor, select, statement, unprepared).
Esto se debe a la forma en que las retrollamadas y los grupos de conexión parecen funcionar en Eloquent. Por ejemplo, al intentar consultar “ROW_COUNT()” siempre devolvía un “0” Después de buscar múltiples soluciones que realmente funcionaban me di cuenta… transacción. Las transacciones tienen que mantener la misma conexión o no se puede hacer rollback/commit.
Php fetch
En consultas “INSERT INTO ON DUPLICATE KEY UPDATE”, aunque uno puede esperar que affected_rows devuelva sólo 0 o 1 por fila en consultas exitosas, de hecho puede devolver 2. Del manual de Mysql: “Con ON DUPLICATE KEY UPDATE, el valor de affected_rows por fila es 1 si la fila se inserta como una fila nueva y 2 si se actualiza una fila existente. “Véase: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.htmlHere es el desglose de la suma _por fila_:+0: una fila no se actualizó ni se insertó (probablemente porque la fila ya existía, pero no se cambiaron valores de campo durante la ACTUALIZACIÓN)+1: una fila se insertó+2: una fila se actualizó