2016-03-17 4 views
-2
try { 
$pdo = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword); 
} catch (PDOException $e){ 
exit('Datebase error.'); 
} 
// db login info is already defined, just didnt post it here 

$username = $_GET["user"]; 
$password = $_GET["passwd"]; 
//$data = mysqli_query($mysqli, "SELECT * FROM users WHERE username='".$username."'"); 
//$hash = mysqli_fetch_object($data); 
$query = "SELECT username, password, loginreqkey, banned FROM users WHERE username='$username'"; 

//if (password_verify('rasmuslerdorf', $hash)) { 
if ($stmt = $pdo->prepare($query)) { 
$stmt->execute(array($username, $password, $loginreqkey, $banned)); 
//$stmt->bind_result($username, $password, $loginreqkey, $gbanned); 
// $result = $stmt->fetch(PDO::FETCH_LAZY); 
//$dt = $stmt->fetchAll() ; 
//$query->execute(array($username, $password)); 
if (password_verify($password, $result['password'])) { 

while($r = $stmt->fetchAll(PDO::FETCH_ASSOC)){ 
echo "{"; 
echo '"state": "success",'; 
    echo '"loginreqkey": "' . $r['loginreqkey'] . '",'; 
    echo '"banstatus": "' . $r['banned'] . '"'; 
    echo "}"; 
} 

/* close statement */ 
$stmt = null; 
} else { 
die("fake pw lol"); 
} 

/* close connection */ 
$pdo = null; 
} 
//} 

Попытка конвертировать мой код из MySQLi в PDO и возникла проблема .. пытаясь получить всю информацию в запросе и проверить пароль пользователя, затем повторить остальную информацию (для нереальный проект) попробовал пару решений по документации php и stackoverflow, но они обычно были предназначены для отправки информации на сервер mysql.Пытается преобразовать из mysqli в pdo

+1

Так что же не работает? Ошибки? –

+0

'$ stmt-> execute (array ($ username, $ password, $ loginreqkey, $ banned)), почему вы это делаете? У вас нет параметров в вашем запросе. – Daan

+0

Btw: '$ password = $ _GET [" passwd "]' - Действительно? Хорошо, параметры POST не очень безопасны; но, по крайней мере, они не попадают в историю браузера или кэш так легко. – VolkerK

ответ

2
$username = $_GET["user"]; 
$password = $_GET["passwd"]; 

$pdo = new PDO("mysql:host=$dbhost;dbname=$dbname;charset=utf8", $dbusername, $dbpassword, array(
    PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION // ....since there is no further error handling in the script 
)); 

$stmt = $pdo->prepare("SELECT username, password, loginreqkey, banned FROM users WHERE username=:username"); 
$stmt->bindParam(':username', $username); 
$stmt->execute(); 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 
if ($result && password_verify($password, $result['password'])) { 
    echo json_encode [ 
     "state" => "success", 
     "loginreqkey" => $result['loginreqkey'], 
     "banstatus" => $result['banned'], 
    ]; 
} 

Вот как бы я это сделал.

+0

@ Ваш общий смысл: Thx, я как раз собирался прокомментировать этот вопрос ;-) – VolkerK

+0

@VolkerK какой? руководство JSON форматирование, я думаю? :) Я также исправил пустую ошибку $ result. –

+0

На самом деле оба, но я имел в виду «нет такой записи»/result thingy ;-) – VolkerK

0

Просто для полноты: похоже, вы пытались связать поля результатов с помощью $stmt->execute(array(...)). Это не работает PDO.
Если вы хотите сделать это, вам нужно будет использовать PDOStatement::bindColumn, например, например.

$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly', array(
    PDO::ATTR_EMULATE_PREPARES=>false, 
    PDO::MYSQL_ATTR_DIRECT_QUERY=>false, 
    PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION 
)); 
setup($pdo); 

$username = $_GET["user"]; 
$password = $_GET["passwd"]; 

$query = sprintf(
    "SELECT username, `password`, loginreqkey, banned FROM users WHERE username='%s'", 
    $pdo->quote($username) 
); 
$stmt = $pdo->query($query); 
$stmt->bindColumn(1, $username); 
$stmt->bindColumn(2, $password); 
$stmt->bindColumn(3, $loginreqkey); 
$stmt->bindColumn(4, $banned); 

if (!$stmt->fetch(PDO::FETCH_BOUND)) { 
    noSuchRecordHandler(); 
} 
else if (!password_verify($password, $result['password'])) { 
    wrongPasswordHandler(); 
} 
else { 
    // would be "nice" if there was something like header('Content-type: application/json'); prior to sending the json data 
    echo json_encode([ 
     "state" => "success", 
     "loginreqkey" => loginreqkey, 
     "banstatus" => $banned, 
    ]); 
} 

Но я предлагаю сделать это, как показано в сообщении SGR's.

Смежные вопросы