PDA

Ver la Versión Completa : mysql_affected_rows me devuelve -1 como resultado de una consulta


D-MO
29-12-2005, 19:14:30
Hola, en esta ocasion los molesto por lo siguiente:

$result= mysql_query("SELECT tabla, titulo, texto, vinculo FROM dmo_buscador");
$total_tablas = mysql_affected_rows();
$tabla = mysql_fetch_assoc($result);
for ($cont=1; $cont<=$total_tablas; $cont++){
$result2= mysql_query ("SELECT id, ".$tabla['titulo'].",
".$tabla['texto']." FROM ".$tabla['tabla']."WHERE ".$tabla['titulo']."
LIKE ".$_POST['buscar']." OR ".$tabla['titulo']." LIKE ".$_POST['buscar']);
$encontrados= mysql_affected_rows();
}
Como podran darse cuenta con este codigo, tomo los datos de un formulario de busqueda con un campo de texto llamado "buscar".

Tengo una tabla llamada "dmo_buscador" en la que almaceno los nombres de las tablas en las que se pueden realizar las busquedas, esta tabla tiene cuatro campos, los caules son:
tabla = nombre de el tabla en la que se puede buscar.
titulo = campo en la que la tabla descrita en el campo "tabla" almacena el titulo.
texto = campo en el que la tabla almacena el contenido
vinculo = almacena el vinculo que se usaria para accesar al texto.

Tomo los datos anteriores con la primera consulta y estos los paso por la segunda.

El problema es que mysql_affected_rows() me regresa un valor -1 en la segunda consulta por lo que me indica que la consulta no se pudo realizar.

Llevo ya algun rato tratando con esto y la verdad ya no hayo que hacer. Se los dejo aca por si a lo mejor alguien me puede ayudar.

Saludos.

roman
29-12-2005, 19:19:50
Es mysql_num_rows y no mysql_affected rows la función que debes usar.

// Saludos

D-MO
29-12-2005, 19:22:11
ok roman gracias. Lo voy a intentar.
Saludos.

PD: Me impresiona tu velocidad:eek:

dec
29-12-2005, 19:23:14
Hola,

Lo que me extraña es que ya el primer uso que haces de la función no te devuelva -1, por lo que puede leerse en la descripción de la función a que haces referencia:



mysql_affected_rows() returns the number of rows affected by the last INSERT, UPDATE or DELETE query associated with link_identifier. If the link identifier isn't specified, the last link opened by mysql_connect() is assumed.
Claro, que, también se dice lo siguiente un poco más abajo:



To retrieve the number of rows returned by a SELECT, it is possible to use also mysql_num_rows().

D-MO
29-12-2005, 19:24:14
me muestra esto Warning: Wrong parameter count for mysql_num_rows() in Z:\www\gl\componentes\buscador\index.php on line 36

D-MO
29-12-2005, 19:26:59
Lo que me extraña es que ya el primer uso que haces de la función no te devuelva -1, por lo que puede leerse en la descripción de la función a que haces referencia:
Pues la verdad es que si me devuelve la cantidad de datos dentro de la tabla en la primera consulta pero no en la segunda.
y siempre habia usado mysql_affected_rows para estas operaciones.

Saludos.

dec
29-12-2005, 19:27:23
Hola,

Hay que saber cómo estás tratando de usar la función. Este es el ejemplo que acompaña a la descripción de la función "mysql_num_rows":



<?php

$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $link);

$result = mysql_query("SELECT * FROM table1", $link);
$num_rows = mysql_num_rows($result);

echo "$num_rows Rows\n";

?>


La ayuda de la función puedes encontrarla en PHP.net, aquí mismo (http://es2.php.net/mysql_num_rows).

dec
29-12-2005, 19:30:18
Hola,



Pues la verdad es que si me devuelve la cantidad de datos dentro de la tabla.
y siempre habia usado mysql_affected_rows para estas operaciones.
A mí también me extraña que la ayuda diga esto:



To retrieve the number of rows returned by a SELECT, it is possible to use also mysql_num_rows().
Porque yo podría traducirlo así, más o menos: "Para obtener el número de filas que retorna un consulta SELECT es posible también usar mysql_num_rows();" Ese también no me cuadra con lo que he copiado más arriba y que también se refiere en la ayuda:



mysql_affected_rows() returns the number of rows affected by the last INSERT, UPDATE or DELETE query associated with link_identifier. assumed.

dec
29-12-2005, 19:53:04
Hola,

D-MO, te pido disculpas, pues creo que he metido la pata. Resulta que duplicaste tu mensaje anterior, y yo borré uno de los duplicados (el que tenía "peor formato", a mi entender) pero, mientras, tú borraste el otro... Así que yo he tratado de recuperar este otro, pero,... no he sabido hacerlo y he hecho con él otra cosa que no entiendo del todo bien: lo he mandado a la "cola de moderadores"... En fin, me disculpo contigo por este pequeño lío.

En todo caso, referías la ayuda de la función que nos ocupa en español, copiada del archivo de ayuda que tienes en tu disco duro. Bueno. Creo que aquí la cuestión puede devenir en algún problema, si haces uso de la función "mysql_affected_rows" para "contar" los resultados de una consulta "SELECT".

Según dice la ayuda esa función no se usa para consultas SELECT, y, el resultado que puedes obtener (creyendo que se trata del resultado de tu consulta SELECT) es el número de filas afectadas por anteriores consultas INSERT, UPDATE, DELETE.

Y, por otro lado, cierta lógica (siempre quise decir algo así) dice que una consulta SELECT no afectará a las filas, como sí lo haría una consulta DELETE, UPDATE, INSERT. Por ello lo que quieres obtener se encuentra en la función que refirió Román al principio y que también "recomienda" la ayuda de la función "mysql_affected_rows", y es que has de usar la función "mysql_num_rows", para obtener las filas conque cuentas luego de una consulta SELECT.

Siento lo del mensaje que he borrado sin querer. Me disculpo de nuevo D-MO. Eso para por jugar con fuego... ¿no se dice así? ;)

D-MO
29-12-2005, 20:04:10
Con respecto al mensaje no hay problema.;)

Te comento lo que acabo de hacer:

Quite de la consulta la sentencia WHERE creyendo qye talves era este el problema y use de nuevo mysql_affected_rows, y para sorpresa mia me muestra el numero exacto de registros en esta tabla.
Hice lo mismo con mysql_num_rows y el resultado fue el mismo error descrito anteriormente.

Creo que en lugar de avanzar voy para atras porque cada vez me enredo un poco mas.

D-MO
29-12-2005, 20:06:18
Perdon. Si me funciono con mysql_num_rows.

PD:No edito el anterior para evitar "problemas":D:D

roman
29-12-2005, 20:07:45
Hice lo mismo con mysql_num_rows y el resultado fue el mismo error descrito anteriormente.


¿Para qué tanto brinco estando el suelo tan parejo? :D

Si consultas la ayuda de PHP acerca de mysql_num_rows te darás cuenta inmediatamente de porqué marca ese error y cual es el argumento que debes pasar.

// Saludos

D-MO
29-12-2005, 20:10:55
¿Para qué tanto brinco estando el suelo tan parejo? :D

Si consultas la ayuda de PHP acerca de mysql_num_rows te darás cuenta inmediatamente de porqué marca ese error y cual es el argumento que debes pasar.

// Saludos
Si Roman esque cuando cambie la ultima vez de mysql_affected_rows a mysql_num_rows unicamente cambie affecter por nums (para evitar la fatiga) y no pase la variable $result2.

Pero cuando tenia WHERE dentro de la consulta lo tenia como era pero siempre me mostraba este error.

La verdad es que necesito WHERE dentro de la consulta.

dec
29-12-2005, 21:08:18
Hola, La verdad es que necesito WHERE dentro de la consulta. Pero, bueno, ¿al final lograste lo que querías no? Es que no me queda claro. ;)

D-MO
29-12-2005, 21:57:40
Hola, Pero, bueno, ¿al final lograste lo que querías no? Es que no me queda claro. ;) Hola, disculpen la tardanza pero este me surgio un asunto de mucha importancia que atender.

Pues fijate que no he podido hacer lo que necesito, porque me funciona el mysql_affected_rows y mysql_num_rows pero cuando WHERE no esta en la consulta, y como podras darte cuenta necesito usar el where para que me muestre los valores que coinciden con la busqueda.
Gracias por la ayuda de ambos. Seguire investigando y luego les aviso

PD: A los Moderadores: El editor de vB al menos en este mensaje no es wysiwyg
Le di mas o menos formato aeste mensaje pero con codigo html. No se si soy yo o el editor.

Saludos.

D-MO
29-12-2005, 22:29:31
Gracias a la explicacion de Roman en este hilo (http://www.clubdelphi.com/foros/showthread.php?p=123475#post123475), se me o currio hacerlo utilizando mysql_fetch_object en logar de mysql_fetch_assoc para hacerlo mas facil dentro de la consulta. con lo que me ha quedado esto:

$result= mysql_query("SELECT tabla, titulo, texto, vinculo FROM dmo_buscador");
$total_tablas = mysql_affected_rows();
$tabla = mysql_fetch_object($result);
for ($cont=1; $cont<=$total_tablas; $cont++){
$result = mysql_query("SELECT id, $tabla->titulo, $tabla->texto FROM $tabla->tabla
WHERE $tabla->titulo LIKE '".$_POST['buscar']."'");
$encontrados= mysql_affected_rows();
echo $encontrados; El echo lo coloque para que me muestre los resultados.

Ahora me muestra 0 (ya subio de nivel:D de -1 a 0:D).
Ahora no se porque me muestra 0 si deberia haber encontrado al menos algun dato.
Nota: LIKE lo uso por primera vez y no se si es lo adecuado para esto.

dec
30-12-2005, 00:28:38
Hola,

A ver, yo creo que no tiene nada que ver el "WHERE" para lo que nos ocupa. No tiene lógica, y podría añadirse que en la ayuda no se dice nada al respecto. Yo he hecho una prueba tal que así:


$conexion = mysql_connect('localhost', '', '');
mysql_select_db('wp', $conexion);

$consulta = "SELECT * FROM wp_posts WHERE post_author = 1";
$resultado = mysql_query($consulta, $conexion);

echo mysql_num_rows($resultado);

La función "mysql_num_rows" hace lo que se espera que haga: devuelve el número de filas conque contamos luego de ejecutar la consulta SQL "SELECT", incluso, como en el caso anterior, si esta cuenta con una condición "WHERE". ¿Hay algo que se nos está escapando o qué? ;)

D-MO
30-12-2005, 00:52:38
Hola dec gracias de nuevo por contestar.

Claro que el usar WHERE dentro de la consulta no tendria que afectar, el problema era (segun mi logica) que no se podia hacer de la forma en que lo estaba haciendo:

$tabla = $mysql_fetch_assoc ($result);
"...WHERE ".$tabla['titulo']." LIKE '".$_POST['buscar']."'"
no se la verdad porque pero cuando lo hice de esta manera:


$tabla = $mysql_fetch_object ($result);
"...WHERE $tabla->titulo LIKE '".$_POST['buscar']."'"[/php]

me funciona a la perfeccion.

El problema ahora, como explicaca en el post anterior, es que al utilizar el LIKE me muestra resultados unicamente si son introducidos tal cual esta en la tabla.

lo que me interesa es buscar si al menos una palabra de las buscadas aparece en la tabla.

Ya se me ocurrio el uso de PRCE como se hablaba anteriormente en el hilo de las etiquetas vB, pero para ello tendria que cargar todos los datos de la base de datos a un array dentro de la pagina, lo cual creo que consumiria un recurso muy preciado Llamado "TIEMPO".

Por el momento me tomo un descanso, cierro el editor y seguire buscando en internet algo que me ayude.

De nuevo gracias por tus comentarios.

Saludos.

dec
30-12-2005, 01:17:55
Hola,

Empiezo a perderme en estos temas, pero, algo como esto me funciona si en el campo buscado existe la palabra requerida:



SELECT * FROM wp_posts WHERE post_title LIKE "%palabra%"


Es decir, se trata de usar el comodín "%" en este caso, aunque, tengo entendido que hay otros comodines y que incluso el mencionado dá no poco juego... convieme revisar esto a ver. Yo no sabría decir ahora mismo más. ;)

D-MO
30-12-2005, 01:37:19
de hecho lo intente asi:

'WHERE $tabla->titulo LIKE "%buscar%" OR $tabla->texto LIKE "%buscar%"');
pero el resultado es el mismo.

SAludos.

dec
30-12-2005, 01:39:52
Hola,

D-MO, ¿no habrá un problema con la sintaxis de la consulta SQL que tratas de llevar a cabo? Veo comillas sospechosas de causar algún problema... ¿Qué dices? ;)

D-MO
30-12-2005, 01:48:16
Hola,

D-MO, ¿no habrá un problema con la sintaxis de la consulta SQL que tratas de llevar a cabo? Veo comillas sospechosas de causar algún problema... ¿Qué dices? ;) Me di cuenta en el tu post anterior, ya lo arregle, pero ahora no me muestra -1 lo que me indica que la cunsulta si se realizo, pero me muestra 0 lo que tambien me indica que no encontro nada en la base de datos.

me podrias chequear porfa, esque no soy muy bueno en esto aca te pongo todo el codigo de las consultas $result= mysql_query("SELECT tabla, titulo, texto, vinculo FROM dmo_buscador");
$total_tablas = mysql_affected_rows();
$tabla = mysql_fetch_object($result);

/////----Separo Consultas----/////

for ($cont=1; $cont<=$total_tablas; $cont++){
$result2 = mysql_query("SELECT id, $tabla->titulo, $tabla->texto FROM $tabla->tabla
WHERE $tabla->titulo LIKE '%buscar%' OR $tabla->texto LIKE '%buscar%'");
$encontrados= mysql_affected_rows();
echo $encontrados;

dec
30-12-2005, 01:55:19
Hola,

A ver, hay algo, antes de nada, que me llama la atención en el código que copias: ¿No hemos quedado en que no ha de usarse la función "mysql_affected_rows", sino que en su lugar, para las consultas SELECT es menester hacer uso de la función "mysql_num_rows"?

Tal vez existan otros problemas en el resto del código, pero, a ver qué tal, si, para empezar, a la variable "$total_tablas" le asignas el resulado de "mysql_num_rows" y no el de "mysql_affected_rows". ;)

D-MO
30-12-2005, 01:56:04
Yahoooooooooooooooooo....(no es por hacer publicidad sino por expresar alegria).

bien, creo que resolvi parte del problema

ahora de dentro de el cuadro de texto escribo Hola me muestra el total de registros que tienen la palabra hola, mi unico problema es cuando escribo mas de una palabra.

Te doy las gracias Dec por todo, me ha sido de gran ayuda, Asi es como me queda el codigo:
$result= mysql_query("SELECT tabla, titulo, texto, vinculo FROM dmo_buscador");
$total_tablas = mysql_affected_rows();
$tabla = mysql_fetch_object($result);
/////----Separo Consultas----/////
echo $_POST['buscar'];

for ($cont=1; $cont<=$total_tablas; $cont++){
$result2 = mysql_query("SELECT id, $tabla->titulo, $tabla->texto FROM $tabla->tabla
WHERE $tabla->titulo LIKE '%$buscar%' OR $tabla->texto LIKE '%$buscar%'");
$encontrados= mysql_affected_rows();
echo $encontrados;

1,000,000 de gracias de nuevo.
Saludos

D-MO
30-12-2005, 02:00:28
ok
¿No hemos quedado en que no ha de usarse la función "mysql_affected_rows", sino que en su lugar, para las consultas SELECT es menester hacer uso de la función "mysql_num_rows"?
Nuevo codigo Cambiado a mysql_num_rows;)
Pero igual me funciona de la misma manera.

D-MO
30-12-2005, 02:07:21
Bueno, por hoy esto es todo Dec, necesitan de mi en otro lugar:cool:.

Muchas gracias, vuelvo manana a postear mas dudas:D en este hilo:D.

Saludos.

oyepez
26-12-2007, 16:48:16
:rolleyes:

Hola como estan...
Quizas la solucion esta en que debes pasarle a mysql_affected_rows() y mysql_num_rows() el resultset de tu consulta osea:

resultset = mysql_query('LA CONSULTA');

echo mysql_affected_rows(resultset);
echo mysql_num_rows(resultset );

No se si fue de ayuda esto.....

fide
11-01-2008, 11:29:12
Por lo que anduve leyendo, las funciones mysql_affected_rows mysql_num_rows() necesitan un parametro de referencia a la consulta que se llevo a cabo.

Oyeme, que version de php estan usando ustedes he??

yo uso la 5.2.5 Stable!!!!

Y me va de lo mejor!