Stránka 1 z 1
MySQL do PDO
Napsal: 02 pro 2015 15:56
od MrFiliper
Zdravím, potřebuji pomoci s převodem MySQL do PDO. Od svého počátku programování používám výhradně PDO, a tak jsem zkoušel různé věci, procházel jsem google, ale asi po 2 hodinovém hledání mi to stejně nefungovalo. Prosím o pomoc, co přesně v kódu změnit.
Kód: Vybrat vše
if(mysql_num_rows($a) == 1 ) {
$password_info=mysql_fetch_array($a);
$sha_info = explode("$",$password_info[0]);
} else return false;
if( $sha_info[1] === "SHA" ) {
$salt = $sha_info[2];
$sha256_password = hash('sha256', $password);
$sha256_password .= $sha_info[2];;
if( strcasecmp(trim($sha_info[3]),hash('sha256', $sha256_password) ) == 0 ) return true;
else return false;
}
Jde mi hlavně o mysql_num_rows, nevím jak přesně to nahradit, aby to bralo PDO.
Připojení zde:
Kód: Vybrat vše
$dbs = new PDO("mysql:host=host;port=3306;dbname=db", "uzivatel", "heslo");
$dbs->query("SELECT password FROM authme where username = '$nickname'");
Zkoušel jsem podle řešení zde:
http://stackoverflow.com/questions/8833 ... t-with-pdo ale nefunguje. Za každou pomoc budu rád.
Re: MySQL do PDO
Napsal: 02 pro 2015 17:14
od lamin_cz
A co Ti vrátí $dbs->fetchColumn() ?
Re: MySQL do PDO
Napsal: 02 pro 2015 17:28
od strangereu
Dneska jsem dělal něco podobného v jednom projektu pro herní klan, můžeš se inspirovat.
Kód: Vybrat vše
<?php
$dir = "uploads/";
$maps = glob($dir."*.zip");
include "config/core.php";
$PDOselect = $db->prepare("SELECT * FROM maps_uploaded");
$PDOselect->execute();
$result = $PDOselect->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $data) {
echo "
<tr>
<td style='width: 75px;'>".$data["id"]."</td>
<td>".$data["name"]."</td>
<td>".$data["author"]."</td>
<td style='width: 100px;'>".$data["size"]."</td>
<td>".$data["date"]."</td>
</tr>
";
}
?>
Snad ti to pomůže.
E: ["name"] atd... jsou názvy sloupců v DB.
Re: MySQL do PDO
Napsal: 02 pro 2015 23:06
od MrFiliper
Hlásí to chybu jako předtím, tedy "Fatal error: Call to undefined method PDO::execute() in /data/web/virtuals/76568/virtual/www/domains/woblex.cz/classes/class.user.php on line 109"
Kod vypadá takto
Kód: Vybrat vše
$dbs->query("SELECT password FROM authme where username = '$nickname'");
$dbs->execute();
$result = $dbs->fetchAll(PDO::FETCH_ASSOC);
Re: MySQL do PDO
Napsal: 03 pro 2015 08:52
od strangereu
MrFiliper píše:Hlásí to chybu jako předtím, tedy "Fatal error: Call to undefined method PDO::execute() in /data/web/virtuals/76568/virtual/www/domains/woblex.cz/classes/class.user.php on line 109"
Kod vypadá takto
Kód: Vybrat vše
$dbs->query("SELECT password FROM authme where username = '$nickname'");
$dbs->execute();
$result = $dbs->fetchAll(PDO::FETCH_ASSOC);
Nahraď toto:
Kód: Vybrat vše
$dbs->query("SELECT password FROM authme where username = '$nickname'");
Tímto:
Kód: Vybrat vše
$dbs->prepare("SELECT password FROM authme WHERE username = :username");
A hned pod to, napiš toto:
Kód: Vybrat vše
$dbs->bindParam(':username', $_POST["usernamedata"]); // Post si samozřejmě uprav podle toho jak potřebuješ, popřípadě tam hoď var
A zapamatuj si, že query nemá v PDO, co dělat... Od toho je v PDO prepare.
Pak řekni jestli funguje nebo né, podle toho budem pracovat dál.
Re: MySQL do PDO
Napsal: 03 pro 2015 14:30
od MrFiliper
Ne nefunguje. Nevím tedy, jestli to dělám správně bindParam neznám. Kompletní kod vypadá tedy takto:
Kód: Vybrat vše
public function is_user_skyblock($nickname,$password) {
try {
//create PDO connection
$dbs = new PDO("mysql:host=host;port=3306;dbname=db", "user", "pass");
$dbs->prepare("SELECT password FROM authme WHERE nickname = :nickname");
$dbs->bindParam(':nickname', $nickname);
echo $number_of_rows;
if(mysql_num_rows($a) == 1 ) {
$password_info=mysql_fetch_array($a);
$sha_info = explode("$",$password_info[0]);
} else return false;
if( $sha_info[1] === "SHA" ) {
$salt = $sha_info[2];
$sha256_password = hash('sha256', $password);
$sha256_password .= $sha_info[2];;
if( strcasecmp(trim($sha_info[3]),hash('sha256', $sha256_password) ) == 0 ) return true;
else return false;
}
} catch(PDOException $e) {
//show error
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
exit;
}
}
Opět to hází chybu, tentokrát ale právě s bindParam. Error: Fatal error: Call to undefined method PDO::bindParam() in /data/web/virtuals/76568/virtual/www/domains/woblex.cz/classes/class.user.php on line 110
Re: MySQL do PDO
Napsal: 05 pro 2015 12:41
od CZechBoY
No jasně, protože to musíš volat na PDOStatementu
http://php.net/manual/en/pdostatement.bindparam.php
Kód: Vybrat vše
public function is_user_skyblock($nickname, $password) {
try {
//create PDO connection
$dbs = new PDO("mysql:host=host;port=3306;dbname=db", "user", "pass");
$sth = $dbs->prepare("SELECT password FROM authme WHERE nickname = :nickname");
$sth->bindParam(':nickname', $nickname);
$sth->execute();
$row = $sth->fetch();
if($row !== false) {
$sha_info = explode('$', $row['password']);
} else {
return false;
}
if ($sha_info[1] === "SHA") {
$salt = $sha_info[2];
$sha256_password = hash('sha256', $password);
$sha256_password .= $sha_info[2];
return strcasecmp(trim($sha_info[3]), hash('sha256', $sha256_password)) === 0;
}
} catch(PDOException $e) {
//show error
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
exit;
}
}