Foros del Web » Programando para Internet » PHP »

Ayuda con MySQL para PHP

Estas en el tema de Ayuda con MySQL para PHP en el foro de PHP en Foros del Web. Hola, me he metido de lleno con MySQL manejado por PHP, pero tengo un error que me trae de cabeza. No sé qué es lo ...
  #1 (permalink)  
Antiguo 04/10/2005, 16:44
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 14 años, 6 meses
Puntos: 3
Exclamación Ayuda con MySQL para PHP

Hola, me he metido de lleno con MySQL manejado por PHP, pero tengo un error que me trae de cabeza. No sé qué es lo que pasa.

Primero que nada, MySQL me funciona bien. Desde la línea de comandos puedo hacer cualquier cosa (crear bases de datos, tablas, modificarlas, administrarlas, etc).

Pero a la hora de usar PHP para acceder a MySQL me da error. Este es el mensaje que recibo:

Cita:
Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in C:\servidor\web\PHPMySQLAgosto05\tema11_PHP_y_MySQ L\results.php on line 34
select * from books where author like '%4f%'
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\servidor\web\PHPMySQLAgosto05\tema11_PHP_y_MySQ L\results.php on line 47

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\servidor\web\PHPMySQLAgosto05\tema11_PHP_y_MySQ L\results.php on line 51

Number of books found:


Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\servidor\web\PHPMySQLAgosto05\tema11_PHP_y_MySQ L\results.php on line 72

Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in C:\servidor\web\PHPMySQLAgosto05\tema11_PHP_y_MySQ L\results.php on line 73
Este es el código php del archivo results.php:

Código PHP:
<?php 
// Crear nombres de variables cortos:
$searchtype strtolower($_POST['searchtype']);
$searchterm $_POST['searchterm'];

// Eliminar posibles espacios antes y después del término a buscar
$searchterm trim($searchterm);

// Comprobar si se han introducido datos en ambos datos de entrada. Aunque $searchtype sea una lista con valor predeterminado
// siempre es aconsejable hacer esto porque en alguna otra página la entrada de $searchtye podría variar (o ser cambiada
// malintencionadamente por algún usuario). Notar que añadimos la línea del 'trim()' antes de este bloque porque si se 
// introdujeran espacios en blanco, estos no darían error en la condición
if (!searchtype || !$searchterm) {
    echo 
'You have not entered search details. Please go back and try again.';
    exit;
}

// Comprobar si la configuración de PHP actual añade automáticamente secuencias de escape (',",\). Si no es así, añadirlas
// manualmente con addslashes()
if (!get_magic_quotes_gpc()) {
    
$searchtype addslashes($searchtype);
    
$searchterm addslashes($searchterm);
}

// Conexión a la base de datos 
$db mysql_connect('localhost''bookorama''miContrasena''books');

// Crear la consulta
$query "select * from books where ".strtolower($searchtype)." like '%".strtolower($searchterm)."%'";
            
// Llevar a cabo la consulta
$result mysql_query($db$query);

// Averiguar número de ocurrencias (filas) obtenidas para posteriormente poder tratarlas una por una
$num_results mysql_num_rows($result); 

// Mostrar número de resultados
echo '<p>Number of books found: '.$num_results.'</p>';

// Bucle para mostrar los resultados en formato HTML
for ($i 0$i $num_results$i++) {
    
// Obtener fila actual
    
$row mysql_fetch_row($result);
    echo 
'<p><strong>'.($i+1).'. Title: ';
    
// Convertir caracteres especiales de HTML en formato HTML y quitar secuencias de escape del resultado obtenido
    
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>';
}

mysql_free_result($result);
mysql_close($db);

?>
El cual es llamado por un archivo HTML normal con un pequeño formulario de búsqueda.

Por qué me aparecen esos errores que me impiden la conexión? Ya sé que puede parecer engorroso este post, pero suplico que me ayudeis porque me encuentro totalmente perdido.
  #2 (permalink)  
Antiguo 04/10/2005, 17:04
Avatar de joselin  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid, Spain
Mensajes: 23
Antigüedad: 12 años, 6 meses
Puntos: 0
Juraria que te falta un mysqli_select_db ($db, 'dbname') despues del mysq_connect.

Saludos.
Jose
__________________
---
:adios:

http://www.kedesfase.com
  #3 (permalink)  
Antiguo 05/10/2005, 01:42
 
Fecha de Ingreso: julio-2005
Mensajes: 38
Antigüedad: 12 años, 4 meses
Puntos: 0
Buenos días Tigervlc.

Mira, he encontrado este texto por la red, espero que te sirva para solucionarlo


Si tienes instalado MySQL 4 y te estás conectado a la base de datos con clientes “viejos”, puedes tener problemas de conexión al servidor de MySQL.

Este problema se manifiesta de la siguiente manera “Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client“.

Lo que te pasa es lo siguiente:

Tienes instalado MySQL 4.x
Tienes el PHP configurado en la sección mysql con “Client API version 3.x“
¿Como averiguar el Client API Version? Muy fácil, lo puedes mirar ejecutando < ? phpinfo(); ?>, que devuelve la configuración actual del PHP.

Entonces tienes 2 opciones para arregla esto:

Actualizar el cliente MySQL del PHP con la “Client API version 4.x”
Hacerlo funcionar a martillazos.
La primera es más elegante y correcta, pero a veces no podemos actualizar el PHP porque no tenemos privilegios o simplemente ganas, así que explicare la segunda.

El problema reside en que en la versión 4 de MySQL han mejorado el sistema de almacenamiento de password, si te estas conectado a un MySQL 4 desde un cliente 3, la conversión que hace del password para pasárselo al MySQL no coincide con la que espera recibir el servidor.

El “truco” está en cambiar la forma que MySQL 4 almacena los passwords para que use la vieja, así que después de crear el usuario tienes que hacer lo siguiente:

SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');


Saludos
  #4 (permalink)  
Antiguo 06/10/2005, 16:23
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 14 años, 6 meses
Puntos: 3
Pues lo he mirado y sí, el Client API version que tengo instalado es la 3.23.49

Muchas gracias por la información . Si quiero hacer lo primero, dónde puedo encontrar “Client API version 4.x”? en php.net? Y es fácil de instalar y configurar?
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 05:35.