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.