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

Odpovědět
MrFiliper
Level 1
Level 1
Příspěvky: 63
Registrován: 20 bře 2015 22:52

MySQL do PDO

Příspěvek 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.
Uživatelský avatar
lamin_cz
Level 2.5
Level 2.5
Příspěvky: 320
Registrován: 27 říj 2012 10:26
Bydliště: Kostelec u Holešova
Kontaktovat uživatele:

Re: MySQL do PDO

Příspěvek od lamin_cz »

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: 17 zář 2011 12:36
Bydliště: Vršovice
Kontaktovat uživatele:

Re: MySQL do PDO

Příspěvek 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.
MrFiliper
Level 1
Level 1
Příspěvky: 63
Registrován: 20 bře 2015 22:52

Re: MySQL do PDO

Příspěvek 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);
Uživatelský avatar
strangereu
Level 4.5
Level 4.5
Příspěvky: 1719
Registrován: 17 zář 2011 12:36
Bydliště: Vršovice
Kontaktovat uživatele:

Re: MySQL do PDO

Příspěvek 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.
MrFiliper
Level 1
Level 1
Příspěvky: 63
Registrován: 20 bře 2015 22:52

Re: MySQL do PDO

Příspěvek 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
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: MySQL do PDO

Příspěvek 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;
    }  
  }
 
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
Odpovědět

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