2016-10-21 3 views
1

Так что я пытался выполнить этот простой запрос:Простой запрос MySql не работает в PHP

SELECT * 
FROM users 
WHERE Username = 'xyz' 
AND OS = 'Windows 10/Server 2016' 
AND HWID = 'FFrWkNSa1l3TURjek1FWXdNUT09' 
AND MACAddress = '33D255CCFDAD' 

Это то, что я пытался наряду со многими другими:

$q1 = "SELECT * FROM users WHERE Username = '".urldecode($_GET['userName'])."' AND OS = '".urldecode($_GET['OS'])."' AND HWID = '".$HWID."' AND MACAddress = '".$mac."'"; 
$systemMatches = $mysqli->query($q1); 
if($systemMatches->num_rows == 1) 
{ 
echo"Valid System"; 
}else{ 
echo"Invalid System"; 
} 

все переменные неоспоримым награбленных из параметр url и 100% CORRECT (я проверил три раза.)

Возможно, что-то не так с переменной ОС ...? Это необработанная версия ОС: Windows% 2010/Server% 202016.

Как вы можете видеть, он включает в себя 2x пространства. Я обрабатывал пробелы с помощью urldecode(). Я даже проверил через эхо, и он отлично декодировал пространства: Windows 10/Server 2016. Но все же что-то не работает, будет признателен за любую помощь, поскольку я довольно новичок в mysql, спасибо!

PS: Этот запрос работает нормально при выполнении в phpmyadmin с теми же заданными переменными.

ОБНОВЛЕНО КОД - STILL ПЕЧАТЬ: INVALID СИСТЕМА :(

$userName = $mysqli->real_escape_string($_GET['userName']); 
    $OS = $mysqli->real_escape_string($_GET['OS']); 
    $HWID = $mysqli->real_escape_string($_GET['HWID']); 
    $mac = $mysqli->real_escape_string($_GET['mac']); 

    $q1 = "SELECT * FROM users WHERE Username = '".$userName."' AND OS = '".$OS."' AND HWID = '".$HWID."' AND MACAddress = '".$mac."'"; 
    $systemMatches = $mysqli->query($q1); 
    if($userExists->num_rows == 1) 
    { 
    if($systemMatches->num_rows == 1) 
    { 
    echo"Valid System"; 
    }else{ 
    echo"Invalid System"; 
    } 
+2

Вы можете начать с добавления обработки ошибок в MySQL-запрос, на случай ошибки MySQL. – Shadow

+1

Повторите свой запрос, чтобы убедиться, что это так, как вы думаете, и запустите его в консоли. Поскольку вы используете mysqli, запретите SQL-инъекцию, используя подготовленные инструкции с bind_param. – aynber

+0

Я даже повторил свой запрос, это тот же самый запрос, что и выше. Все параметры верны, но я по-прежнему получаю «недействительную систему» ​​:(Спасибо больше за догадки – Noob02017

ответ

1

Прежде всего, вам не нужно «urldecode» вручную, если значение поступает из $_GET, то PHP будет заботиться обо всех декодирование, когда вы получаете доступ к значению, используя $_GET['xyz'].

Кроме того, его отводящей, что может создавать проблемы, так что просто использовать

... 

$userName = $mysqli->real_escape_string($_GET['userName']); 
$os = $mysqli->real_escape_string($_GET['OS']); 

$q1 = " SELECT * FROM users WHERE Username = '". $userName ."' AND OS = '". $os ."' AND HWID = '".$HWID."' AND MACAddress = '".$mac."' 
     LIMIT 1 "; 
... 
+0

Спасибо. Php не позаботился об декодировании. Необработанная переменная OS при повторном отпечатке с 2x% 20. – Noob02017

+0

escape_string тоже не помогло. Любые другие догадки? Спасибо. – Noob02017

+1

nvm на самом деле действительно заботился о декодировании lol спасибо, но запрос все еще не работает :( – Noob02017