Foros del Web » Programando para Internet » PHP »

Error al acceder a la bd

Estas en el tema de Error al acceder a la bd en el foro de PHP en Foros del Web. Buenas, mi problema es el siguiente. Tengo codigo fuente de un cd ke venia en un libro. Mi problema está en que no logro conectar ...
  #1 (permalink)  
Antiguo 26/12/2005, 08:18
 
Fecha de Ingreso: septiembre-2005
Mensajes: 374
Antigüedad: 12 años, 3 meses
Puntos: 0
Error al acceder a la bd

Buenas, mi problema es el siguiente. Tengo codigo fuente de un cd ke venia en un libro. Mi problema está en que no logro conectar php con mysql.Os cuento...
Tengo un archivo llamado search.html que supuestamente hace buscar un libro segun un criterio(por autor, titulo o isbn). Los resultados de dicha buskeda aparecerán en otro archivo llamado results.php. Para ello es necesario acceder a mysql y extraer los resultados de la busqueda.Pues bien...al darle a buscar en la pagina search.html me da el siguiente error:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in f:\archivos de programa\easyphp1-8\www\results.php on line 35

Number of books found:


Como veis estoy utilizando el EasyPHP. Os pongo el codigo por si kereis ayudarme.
El archivo search.hmtl es el siguiente:


<html>
<head>
<title>Book-O-Rama Catalog Search</title>
</head>

<body>
<h1>Book-O-Rama Catalog Search</h1>

<form action="results.php" method="post">
Choose Search Type:<br />
<select name="searchtype">
<option value="author">Author</option>
<option value="title">Title</option>
<option value="isbn">ISBN</option>
</select>
<br />
Enter Search Term:<br />
<input name="searchterm" type="text">
<br />
<input type="submit" value="Search">
</form>

</body>
</html>



El archivo results.php es el siguiente:


<html>
<head>
<title>Book-O-Rama Search Results</title>
</head>
<body>
<h1>Book-O-Rama Search Results</h1>
<?php
// create short variable names
$searchtype=$HTTP_POST_VARS['searchtype'];
$searchterm=$HTTP_POST_VARS['searchterm'];

$searchterm= trim($searchterm);

if (!$searchtype || !$searchterm)
{
echo 'You have not entered search details. Please go back and try again.';
exit;
}

$searchtype = addslashes($searchtype);
$searchterm = addslashes($searchterm);

@ $db = mysql_pconnect('localhost', 'bookorama', 'bookorama123');

if (!$db)
{
echo 'Error: Could not connect to database. Please try again later.';
exit;
}

mysql_select_db('books');
$query = "select * from books where ".$searchtype." like '%".$searchterm."%'";
$result = mysql_query($query);

$num_results = mysql_num_rows($result);

echo '<p>Number of books found: '.$num_results.'</p>';

for ($i=0; $i <$num_results; $i++)
{
$row = mysql_fetch_array($result);
echo '<p><strong>'.($i+1).'. Title: ';
echo htmlspecialchars(stripslashes($row['title']));
echo '</strong><br />Author: ';
echo stripslashes($row['author']);
echo '<br />ISBN: ';
echo stripslashes($row['isbn']);
echo '<br />Price: ';
echo stripslashes($row['price']);
echo '</p>';
}
?>

</body>
</html>


GRACIAS
  #2 (permalink)  
Antiguo 26/12/2005, 08:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En tu código:

Código PHP:
for ($i=0$i <$num_results$i++)
{
$row mysql_fetch_array($result); 
Eso no es correcto .. el "mysql_fetch_array()" debe ir fuera de tu bucle ..
Código PHP:
$row mysql_fetch_array($result);
for (
$i=0$i <$num_results$i++)

Y si usas un simple bucle while() simple sobra:

Código PHP:
while($result=mysql_fetch_array($result)){
// etc ...

Igualmente es bueno contar el n° de registros que pueda arrojar la consulta SQL (por mysql_num_rows()) para decidir si corresponde entrar a recorrer los posibles resultados o arrojar un "no hay registros/resultados".

Otro detalle:
$result = mysql_query($query);

es bueno usar:
Código PHP:
$result mysql_query($query) or die (mysql_error()); 
Para ver los mensajes de error a nivel SQL que puedas tener.



Un saludo,
  #3 (permalink)  
Antiguo 26/12/2005, 09:12
 
Fecha de Ingreso: septiembre-2005
Mensajes: 374
Antigüedad: 12 años, 3 meses
Puntos: 0
Gracias cluster, corregí los errores que me dijiste. Ahora cuando le doy a buscar en search.html me dice lo siguiente:

Base de datos no seleccionada

Es muy raro porque en mi codigo fuente no tengo ningun error o else escrito en español. Como soluciono esto? Como debo de seleccionar a la supuesta base de datos? Me sigue sin mostrar los resultados de la búsqueda.Gracias figura.
  #4 (permalink)  
Antiguo 26/12/2005, 09:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Quita la @ delante de la función mysql_pconnect() (o dejala y usa el ejemplo que doy más abajo) .. Observa el error y preferentemente NO uses conexiones persistentes: mysql_connect()

Pero lo importante es ver el error concreto ..
Código PHP:
if (!$db)
{
echo 
'Error: Could not connect to database. Please try again later.<br>';
echo 
"Mysql dice: ".mysql_error();
exit;


Un saludo,
  #5 (permalink)  
Antiguo 27/12/2005, 02:51
 
Fecha de Ingreso: septiembre-2005
Mensajes: 374
Antigüedad: 12 años, 3 meses
Puntos: 0
Buenas de nuevo, he corregido de nuevo lo que me has comentado, pero sigo con el mismo problema.Al darle a buscar en search.html me dice "base de datos no seleccionada". Lo mismo tengo que cargar en la linea de comandos de mysql la base de datos, si es asi...como seria? Con PhpMyAdmin a la iquierda t sale un apartadao para seleccionar la base de datos deseada, con darle aki a la base de datos ke kiero seria suficiente para cargarla y poder utilizarla con las paginas php y html?

Estoy un poco deskiciado ya que me parece que no intercatúa mi base de datos mysql con las paginas php.
Un saludo.
  #6 (permalink)  
Antiguo 27/12/2005, 09:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero que mensaje de error exactamente dá Mysql .. (usando la función mysql_error() como te describí).

Un saludo,
  #7 (permalink)  
Antiguo 28/12/2005, 14:40
 
Fecha de Ingreso: septiembre-2005
Mensajes: 374
Antigüedad: 12 años, 3 meses
Puntos: 0
Los errores de Mysql no se donde se pueden ver. Tan solo veo en el navegador que pone "base de datos no seleccionada" cuando pincho buscar.
  #8 (permalink)  
Antiguo 29/12/2005, 03:45
 
Fecha de Ingreso: septiembre-2005
Mensajes: 374
Antigüedad: 12 años, 3 meses
Puntos: 0
Creo ke he encontrado lo del error de mysql. Estaba en un fichero con mi nombre.err . Pues bien, el último mensaje de error que me sale es el siguiente:

nnoDB: Started; log sequence number 0 43644
051229 9:24:06 [Warning] mysql.user table is not updated to new password format; Disabling new password usage until mysql_fix_privilege_tables is run
051229 9:24:06 [Warning] Can't open and lock time zone table: Tabla 'mysql.time_zone_leap_second' no existe trying to live without them
F:\ARCHIV~1\EASYPH~1\MySql\bin\mysqld.exe: preparado para conexiones Source distribution


Sigo haciendo pruebas con varios ejemplos para conectar PHP con MYSQL pero sigo sin resultados satisfactorios.Lo mismo no voy bien encaminado. Gracias
  #9 (permalink)  
Antiguo 29/12/2005, 05:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El error que te digo que cual te muestra concretamente Mysql (parte de lo que en el LOG ves) se hace con el uso de la función de PHP que te he mostrado e indicado varias veces ..

Te dije que probases:
Código PHP:
if (!$db

echo 
'Error: Could not connect to database. Please try again later.<br>'
echo 
"Mysql dice: ".mysql_error(); 
exit; 

Y que -por favor- no intentes "describir" o interpretar el mensaje de error que ahí te diga . .SIMPLEMENTE, cortalo y pegalo aquí .. en este mensaje!!!!!!.

A todo esto .. que versión de PHP usas y cual de Mysql. El error que te indica el Log (a falta de confirmación) se refiere al uso de las funciones mysql_xxxx() con Mysql 4.1.x o superior y pretender usar el viejo sistema de gestión de contraseñas para los usuarios de Mysql ..

Confirma eso primero!.

Un saludo,
  #10 (permalink)  
Antiguo 29/12/2005, 06:09
 
Fecha de Ingreso: septiembre-2005
Mensajes: 374
Antigüedad: 12 años, 3 meses
Puntos: 0
Buenas maestro cluster. Tal y como dijimos en aquella ocasión, puse el codigo tal cual me dijiste.

if (!$db)
{
echo 'Error: Could not connect to database. Please try again later.<br>';
echo "Mysql dice: ".mysql_error();
exit;
}

Lo que me pone en el log de mysql es eso que te comento en el post anterior. Yo utilizo el paquete EasyPhp1.8. Este paquete contiene lo siguiente:
APACHE 1.3.33
PHP 4.3.10
MYSQL 4.1.9
PHPMYADMIN 2.6.1

Siento ser tan pesado con este tema...pero si no logro conectar php con mysql no puedo utilizar ninguna d las paginas php que tengo. He empezado ahora en este mundillo y lo necesito para terminar un proyecto.
A lo mejor estoy yo confundido en algun paso y por eso no me conecta, o puede ser ke el easyphp haya ke configurarlo de alguna manera(que yo desconozco). El caso eske estoy parado y no paro de dar follon por aki. Un saludo y muchas gracias.
  #11 (permalink)  
Antiguo 29/12/2005, 06:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero insisto .. Lo que pretendo hacer verte es que existe una función de PHP para ver mensajes de error de Mysql exactos! . .para no tener que ir a ver el log .. controlable a tu gusto y como se usa. También debes conocer que se pueden originar problemas al conectarte o al hacer tu consulta SQL .. o al seleccionar la Base de datos .. por eso dicha función "mysql_error()" se usa como "condicional" como tu código lo hace . .pero no mostrando una "frase" que estará muy bien para dar un mensaje a un usuario del sistio sin desvelar rutas o nombres de escripts comprometedores . .pero TU como desarrollador DEBES verlos en su totalidad.

QUe dice cuando ejecutas esto:

Código PHP:
$db mysql_pconnect('localhost''bookorama''bookorama123') or die (mysql_error()); 
Por favor .. no me interpretes lo que diga . .pega TODO lo que veas aquí en eeste mensaje.

Un saludo,
  #12 (permalink)  
Antiguo 29/12/2005, 07:22
 
Fecha de Ingreso: septiembre-2005
Mensajes: 374
Antigüedad: 12 años, 3 meses
Puntos: 0
Ja ja. Estimado amigo cluster, me parece ke ando un poco perdido en este tema y no entiendo bien estas cosas.Ya no se donde tengo ke mirar cuando tu me dices "Por favor .. no me interpretes lo que diga . .pega TODO lo que veas aquí en eeste mensaje."

No se a lo ke te refieres cuando dices que ejecute esa linea.

$db = mysql_pconnect('localhost', 'bookorama', 'bookorama123') or die (mysql_error());

Como ejecuto esta linea de codigo si la tengo dentro de un archivo results.php ?? creo ke no nos estamos entendiendo jeje.mira yo te digo paso a paso lo ke hago para ver si estoy equivocado.

Tengo 2 archivos. En concreto son: search.html, results.php
Me conecto al easyphp y se me ponen los 2 semaforos en verde. Accedo a phpmyadmin y selecciono la base de datos bookorama (que es la supuesta base de datos del ejemplo en cuestion). Para estar mas seguro de ello...accedo al monitor de mysql por la linea de comandos y pongo lo siguiente: mysql -u root -p para acceder al prompt de mysql. Cargo la base de datos d esta manera: use bookorama; (a partir de aki ya puedo ver las tablas y los registros de mi base de datos).
Entonces es cuando en el navegador ejecuto el search.html de la siguiente manera:
http://127.0.0.1/search.html
Introduzco un autor que tengo en la base de datos mysql y le pulso buscar. Se me ejecuta a continuación la pagina results.php que me dice lo siguiente: Base de datos no seleccionada.

Eso es todo lo que yo hago. No se a lo que te refieres cuando me dices :"existe una función de PHP para ver mensajes de error de Mysql exactos! . .para no tener que ir a ver el log " . Entonces donde puedo ver el error si no es en el log? en el navegador? en el navegador me dice el error ke t comento. Donde se ve pues? Yo he puesto el mismo codigo tal cual me lo dictas. Siento mi ignorancia, no tengo intencion de molestarte mas. Ante todo mil garcias por dedikarme tu tiempo.
  #13 (permalink)  
Antiguo 29/12/2005, 07:37
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 13 años, 3 meses
Puntos: 1
Madre mía...Cluster, cuenta hasta 10 :)
__________________
Mi página personal: Julián Urbano
  #14 (permalink)  
Antiguo 29/12/2005, 08:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
1,2,3,4,.....

Pero ...
Cita:
Introduzco un autor que tengo en la base de datos mysql y le pulso buscar. Se me ejecuta a continuación la pagina results.php que me dice lo siguiente: Base de datos no seleccionada.
Ese mensaje sale del código:

echo 'Error: Could not connect to database. Please try again later.<br>';

y exactamente te debe aparecer eso en tu navegador .. (o no?) .. por eso te digo que no me lo traduzcas ni me lo intentes explicar .. sólo pon lo que tu ves . .por qué con eso ya que YO no estoy probando tu código y viendo por donde "pasa" no sé donde o hasta donde llega a ejecutarse el código. Por otro lado te dije de añadir esa línea de código a tu actual código para que se ejecute la función "mysql_error()" que NOS dirá exactamente el problema que hay y con ese veras que la solución será problablemente:

http://dev.mysql.com/doc/mysql/en/old-client.html

Te hice el comentario (aunque sea muy superficial) que Mysql 4.1.x en adelante usa un nuveo sistema de gestión de contraseñas para sus usuarios .. así que si usas las funciones de msyql_xxxx() (del cliente "viejo") de Mysql .. tienes que convertir esas contraseñas al modo "antigüo" para que NO te dé el error que ando buscando que te muestre a TI y lo veas claro .. aunque más o menos en el LOG que mostrastes ya sale.

El error en concreto que espero ver es:
"Client does not support authentication protocol requested
by server; consider upgrading MySQL client"

Eso sólo lo veras si usas la función mysql_error() como te he mostrado várias veces.

Pero .. insisto .. se trata de que -aprendas- a ver mensajes de error .. y con eso veras como poner solución.

Un saludo,
  #15 (permalink)  
Antiguo 29/12/2005, 08:37
 
Fecha de Ingreso: septiembre-2005
Mensajes: 374
Antigüedad: 12 años, 3 meses
Puntos: 0
Si el problema que no entiendo es por que me sale a mi en el navegador BASE DE DATOS NO SELECCIONADA. Me sale tal cual, en español !!! Lo raro eske en mi codigo fuente pone eso ke tu me dices:echo 'Error: Could not connect to database. Please try again later.<br>' Y deberia d salir el error asi en ingles , pues no !!, me sale en español y no aperece ese error en mi codigo fuente. Por eso me tomas como un loco y me dices que no interprete ni intente traducir lo que yo veo jajaja. Pues mas sorprendido estoy yo que me aperece eso en español y no lo tengo puesto en mi codigo fuente.
Yo creo tambien ke mi problema debe de ser de contraseñas al conectarme al mysql, pero como me veo conectado en el monitor mysql...pues me supongo ke esta todo bien.
Por eso te digo amigo que yo por mucho ke ponga eso de mysql_error para poder ver en donde falla...siempre me sale lo mismo tal cual t lo pongo yo.
BASE DE DATOS NO SELECCIONADA

Esto hay q tomarselo con humor xq sino le voy a pegar una patá al portatil...
Gracias de corazon, no tienes por que molestarte mas.
  #16 (permalink)  
Antiguo 29/12/2005, 08:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Yo creo tambien ke mi problema debe de ser de contraseñas al conectarme al mysql, pero como me veo conectado en el monitor mysql...pues me supongo ke esta todo bien
A ver .. Mysql gestiona usuarios .. no sé si lo sabías .. así que una cosa es que tu servidor esté "arriba" o disponible y otra será si "aciertas" con los datos de conexión del usuario que tengas que usar. Eso lo tendrás que revisar.

Y .. por otro lado . .tu ya has creado esta base de datos:
mysql_select_db('books') or die (mysql_error());

de nombre "books" ? .. estas seguro que la tienes creada? usa el "mysql_error())" como siempre insisto que te recomiendo!.

Otro detalle .. simpre insisto que por favor se "corte y pegue" el error textual.. por qué si bien OK será esa "frase" que suelta .. ¿seguro que es esa frase así sin más? .. o dice algo más por delante y nombra algúna ruta o algo más .. Podrías hacer un "screenshot" del mensaje de error que obtienes? ..

Con que administras tus BD mysql? .. usas phpMyadmin? . u otro GUI para Msyql? ..

Un saludo,
  #17 (permalink)  
Antiguo 29/12/2005, 09:19
 
Fecha de Ingreso: septiembre-2005
Mensajes: 374
Antigüedad: 12 años, 3 meses
Puntos: 0
Me cago en el control remoto jaja. Ahi le has dao cluster !! El problema estaba en eso, ke mi base de datos la creé con el nombre de bookorama, y era book el nombre que ponia en el codigo fuente. Madre mia que satisfacción y que alivio poder ver por fin el resultado. Deja tu dirección que te envio un jamón de aqui de españa que vas a flipar. Muchas gracias por todo ,de verdad te lo digo. No encontaba el camino y tu me has iluminado jeje. GRACIAS !!!
  #18 (permalink)  
Antiguo 29/12/2005, 09:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Deja tu dirección que te envio un jamón de aqui de españa que vas a flipar.
De Jabugo please y una Orchata de Chufa (de Alboraya-Valencia) (aunque no es la temporada xD)

Un saludo,
  #19 (permalink)  
Antiguo 29/12/2005, 09:25
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 13 años, 3 meses
Puntos: 1
Cita:
Iniciado por Cluster
De Jabugo please y una Orchata de Chufa (de Alboraya-Valencia) (aunque no es la temporada xD)
Jjaja como sabe el amigo chileno eh. Yo mandaría uno de Guijuelo, que para algo son de 'mi tierra'
__________________
Mi página personal: Julián Urbano
  #20 (permalink)  
Antiguo 29/12/2005, 09:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Vivo en Chile (hace ya 5 años) . .pero soy oriundo de Valencia (Spain) xDD (por eso pido la Orchata jejejejeje)

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:05.