MySQL do PDO

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

MrFiliper
Level 1
Level 1
Příspěvky: 63
Registrován: březen 15
Pohlaví: Muž
Stav:
Offline

MySQL do PDO

Příspěvekod MrFiliper » 02 pro 2015 15:56

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.

Reklama
Uživatelský avatar
lamin_cz
Level 2.5
Level 2.5
Příspěvky: 320
Registrován: říjen 12
Bydliště: Kostelec u Holešova
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: MySQL do PDO

Příspěvekod lamin_cz » 02 pro 2015 17:14

A co Ti vrátí $dbs->fetchColumn() ?
  • CPU: Cx6x86L-PR150+
  • MB: XT PRO2
  • GPU: integrovaná
  • RAM: 28Mb SDRAM
PHP, MySQL, HTML, CSS, jQuery ...

Uživatelský avatar
strangereu
Level 4.5
Level 4.5
Příspěvky: 1719
Registrován: září 11
Bydliště: Vršovice
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: MySQL do PDO

Příspěvekod strangereu » 02 pro 2015 17:28

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.
http://screenshare.cz/

MrFiliper
Level 1
Level 1
Příspěvky: 63
Registrován: březen 15
Pohlaví: Muž
Stav:
Offline

Re: MySQL do PDO

Příspěvekod MrFiliper » 02 pro 2015 23:06

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);

Uživatelský avatar
strangereu
Level 4.5
Level 4.5
Příspěvky: 1719
Registrován: září 11
Bydliště: Vršovice
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: MySQL do PDO

Příspěvekod strangereu » 03 pro 2015 08:52

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.
http://screenshare.cz/

MrFiliper
Level 1
Level 1
Příspěvky: 63
Registrován: březen 15
Pohlaví: Muž
Stav:
Offline

Re: MySQL do PDO

Příspěvekod MrFiliper » 03 pro 2015 14:30

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

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: MySQL do PDO

Příspěvekod CZechBoY » 05 pro 2015 12:41

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;
    }  
  
}
 
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti