Я хочу искать запрос в таблице MySQL, называемой «ключи» на основе ключа, а затем возвращать другие значения для этого запроса. (например, «id»)
Вот как выглядит мой стол:
id key customer 88633631 gNjp4CW6E/VfdBqli6zBLw== Name1 41317488 bi74frT3LFGTRkvoW7B31Q== Name2
.. и вот как выглядит мой 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']; } } ?>
Но это не работает. Я думаю, что проблема вызвана 2 равными в конце ключа, но я не уверен. Если я хочу искать «id», а затем распечатать «ключ» найденного «id», он работает.
Я не хочу удалять 2 равных в конце, потому что они связаны с дополнением AES128.
На самом деле проблема не вызвана 2 равными в конце ключа. Он вызван символом «+» внутри строки, но если я его удалю, я не могу расшифровать зашифрованный текст AES128.
Есть несколько ошибок в том, как вы это делаете.
Во-первых, вы не указываете свое значение: '$key'
$query = "SELECT * FROM `keys` WHERE `key` = '$key'";
Во-вторых, ваш код широко открыт для SQL-инъекций. Устраните свое значение:
$key = mysql_real_escape_string($_GET["key"]);
Указанный выше код является абсолютным минимумом, который вам нужно сделать.
Следующее, что функции mysql_
устарели долгое время и были удалены в PHP 7.
Вам нужно переключиться на mysqli_
или PDO
. Чем скорее вы переключитесь, тем лучше. Пожалуйста, прочитайте этот вопрос для получения дополнительной информации: Как я могу предотвратить SQL-инъекцию в PHP?
Помимо всех вышеперечисленных проблем, вы сэкономите себя (и тем более других, если они когда-либо будут читать ваш код), какую-то головную боль, если вы никогда не используете ключевые слова и зарезервированные слова в качестве имен таблиц или столбцов, как Jay Blanchard отметил.
как насчет того, измените ли вы следующую строку
$query = "SELECT * FROM `keys` WHERE `key` = $key";
в
$query = "SELECT * FROM `keys` WHERE `key` = '".$key."' ";
Это происходит потому, что вы не избежали ввода, который должен быть
"SELECT * FROM `keys` WHERE `key` = '$key'"
но в любом случае это не лучший способ сделать это, вы должны использовать подготовленный оператор и обертку, такую как PDO
Что-то вроде этого
$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']; } }