Quiero buscar una consulta en una tabla MySQL llamada "claves" basada en una clave y luego devolver otros valores para esa consulta. (por ejemplo, "identificación")
Así es como se ve mi tabla:
id key customer 88633631 gNjp4CW6E/VfdBqli6zBLw== Name1 41317488 bi74frT3LFGTRkvoW7B31Q== Name2..y así es como se ve mi código PHP:
<?php require 'config.inc.php'; /* Declare variables */ $key = $_GET["key"]; $id = ""; $customer = ""; /* Connect to database and grab the keys */ @mysql_connect($g_mysql_host,$g_mysql_usr,$g_mysql_pass) or die("Couldn't connect to database server"); @mysql_selectdb($g_mysql_db) or die("Couldn't select database"); $query = "SELECT * FROM `keys` WHERE `key` = $key"; $result = mysql_query($query); if (!$result) exit("INVALID KEY"); else { while ($row = mysql_fetch_array($result)) { echo $row['id']; } } ?>Pero esto no funciona. Creo que el problema es causado por los 2 iguales al final de la clave, pero no estoy seguro. Si quiero buscar el "id" y luego imprimir la "clave" del "id" buscado, funciona.
No quiero eliminar los 2 iguales al final, porque están relacionados con el relleno AES128.
En realidad, el problema no es causado por los 2 iguales al final de la clave. Es causado por el carácter "+" dentro de la cadena, pero si lo elimino, no puedo descifrar el texto cifrado AES128.
Hay varias cosas mal con la forma en que haces esto.
Primero, no cita su valor: '$key'
$query = "SELECT * FROM `keys` WHERE `key` = '$key'";En segundo lugar, su código está completamente abierto a la inyección de SQL. Escapa de tu valor:
$key = mysql_real_escape_string($_GET["key"]); El código anterior es el mínimo absoluto que debe hacer.
Lo siguiente es que las funciones mysql_ han quedado obsoletas durante mucho tiempo y se han eliminado en PHP 7.
Deberá cambiar a mysqli_ o PDO . Cuanto antes cambies, mejor. Lea esta pregunta para obtener más información: ¿Cómo puedo evitar la inyección de SQL en PHP?
Aparte de todos los problemas anteriores, te ahorrarás (y más aún a otros, si alguna vez tienen que leer tu código) algún dolor de cabeza si nunca usas palabras clave y palabras reservadas como nombres de tablas o columnas, como Jay Blanchard ha notado.
Eso está sucediendo porque no escapó de la entrada que debería ser
"SELECT * FROM `keys` WHERE `key` = '$key'"pero de todos modos, esta no es la mejor manera de hacerlo, debe usar una declaración preparada y un contenedor como PDO
Algo como esto
$stmt = $db->prepare('SELECT * FROM `keys` WHERE `key` = :key'); $stmt->bindValue(":key", $_GET["key"]); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo $row['id']; } }¿Qué tal si cambias la siguiente línea?
$query = "SELECT * FROM `keys` WHERE `key` = $key";para
$query = "SELECT * FROM `keys` WHERE `key` = '".$key."' ";