PDO - proměná z formuláře jako hodnota selectu v sql dotazu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

PDO - proměná z formuláře jako hodnota selectu v sql dotazu – PHP – Fórum – Programujte.comPDO - proměná z formuláře jako hodnota selectu v sql dotazu – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
ZAJDAN0
Newbie
18. 11. 2014   #1
-
0
-

Ahoj,

snažím se pomocí PDO vytáhnout z databáze data , ale doposud mi to nevrátilo  žádný výsledek:
spojení do databází funguje, proto nebudu uvádět blok pro connection: 

$uniq = $_POST['uniq'];

try	{
	$pdo = new PDO ( $induce, $user, $password, array(
	PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION,	
	PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
	));

	   // připraví se dotaz
	$prepared = $pdo->prepare(" SELECT * FROM customer WHERE uniq = :uniq ");
	  //přiřazení proměných do zástupných symbolů
	$prepared->bindParam(':uniq', $uniq, PDO::PARAM_STR);

	  // provede se dotaz
	$executed = $prepared->execute();   

	 // zisk výsledků
	$result = $executed->fetchAll();
 
	print_r($result);

	}

catch (PDOException $e) {
			die('Connection failed: ' . $e->getMessage() );
			}


prtoměnou $uniq jsem si průfl přes echo a vrací mi správné hodnoty, ale proč se neprovede uvedený dotaz nechápu

Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
18. 11. 2014   #2
-
0
-

#1 ZAJDAN
Chybička se vloudila 

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

Možná ti to pak vrátí výsledek nebo alespoň výjimku. 

A ještě něco:

$prepared = $pdo->prepare(" SELECT * FROM customer WHERE uniq = :uniq ");
$prepared->bindParam(':uniq', $uniq, PDO::PARAM_STR);
$prepared->execute();   
$result = $prepared->fetchAll();
Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
18. 11. 2014   #3
-
0
-

#2 Kit
super...díky moc...

je možné, že někde bude fungovat i: 

PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION,

?...protože v jiných případech jsem to takto "špatně?" zapsal a scripty dělají co mají

ted se dívám na manualové stránky a i ten předchozí zápis by neměl vadit: http://php.net/…handling.php

Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
18. 11. 2014   #4
-
0
-

#3 ZAJDAN
Opravdu ty skripty správně vyhazují výjimky např. u chybného SQL dotazu? Vyzkoušej si to.

V manuálových stránkách ses asi trochu přehlédl. O tom předchozím zápisu tam není ani ň.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
18. 11. 2014   #5
-
0
-

#4 Kit
máš pravdu, každopádně jsem to opravil a výsledek se dostavil...díky  :)

teď se pokouším z toho pole, které mi to vrátí vypisovat pouze některé elementy, ale nejsem si jist, zda to jde pomocí print_r, něco jako toto: 

print_r($result["customerFirstName"]);
Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
18. 11. 2014   #6
-
0
-

#5 ZAJDAN
To ti neprojde, protože fetchAll() dodává seznam slovníků a ty s tím zacházíš jako kdyby to byl slovník - a říkáš tomu pole.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
18. 11. 2014   #7
-
0
-
Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
18. 11. 2014   #8
-
0
-

#7 ZAJDAN
Slovníku se dřív říkávalo "asociativní pole". V OOP se používá pojem "Dictionary", tedy slovník.

Abys z těch dat neměl mišmaš, používej fetchAll() takto: 

$result = $prepared->fetchAll(\PDO::FETCH_ASSOC);

Ještě je další možnost - seznam anonymních objeků: 

$result = $prepared->fetchAll(\PDO::FETCH_OBJ);
Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
18. 11. 2014   #9
-
0
-

#7 ZAJDAN
Seznam, slovník a množina jsou logické struktury (kolekce), které jsou uloženy na fyzické struktuře - zpravidla pole nebo strom.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
18. 11. 2014   #10
-
0
-

#9 Kit
díky, tak jsem se tedy podíval na ten první styl co jsi zmíňoval
PDO::FETCH_ASSOC: returns an array indexed by column name as returned in your result set

pokud tedy z databaze vytahuji včechny sloupce jedním dotazem a ne separovaně, existuje tedy možnost po tom fetchAll nějak definovat, že chci sloupec 'xy' z vraceneho pole? nebo budu nucen si na každý sloupec volat solo sql dotaz?

Nahlásit jako SPAM
IP: 109.107.211.–
Řešení
ZAJDAN0
Newbie
18. 11. 2014   #11
-
0
-
Vyřešeno Nejlepší odpověď

#10 ZAJDAN
žeby takto:
 

foreach ($result as $column) {
	echo $column['uniq'];
 }
Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
18. 11. 2014   #12
-
0
-

#10 ZAJDAN

Vidím, že jsi úplně vedle. Seznam si přece můžeš projít cyklem foreach.

S hvězdičkou v SELECTu zacházej opatrně. Ne vždy je to přesně to, co od databáze požaduješ.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
18. 11. 2014   #13
-
0
-

#11 ZAJDAN
No vidíš, že to jde. Jde to i lépe, ale s tímto si nějakou dobu určitě vystačíš.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
19. 11. 2014   #14
-
0
-

takže primární cíl je nyní funkční ..díky
ještě se pokouším to vrácené "pole" převést na json data
 

$result = $prepared->fetchAll(\PDO::FETCH_ASSOC);
$resultJson = json_encode($result);

ale to asi nebude to správné

Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
19. 11. 2014   #15
-
0
-

#14 ZAJDAN
A co máš ve výsledku?

Zkus se trochu zamyslet nad názvy proměnných, které jsou nyní jak z učebnice. Místo $prepared by asi mělo být $select a místo $result bych raději viděl například $customers. A místo $resultJson? Tak to nevím. Nabízí se $customersJson, ale dvou- a víceslovní názvy proměnných moc rád nemám. Záleží na konkrétním použití.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
19. 11. 2014   #16
-
0
-

#15 Kit
vrací se mi [ ]

Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
19. 11. 2014   #17
-
0
-

#16 ZAJDAN
Asi to nic nenašlo.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
19. 11. 2014   #18
-
0
-

#17 Kit
prázdné to není, protože, z toho samého statemnetu ty elementy z pole dokážu separovat přes víše zmíněný cyklus

foreach ($result as $column) {
	echo '<tr><td style="font-weight: bold;">';
	echo 'ID';
	echo '</td><td>';   
	echo $column['uniq'];
	echo '</td></tr>';
 }
............


a vrací mi to u všech elementů z pole správné hodnoty

Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
19. 11. 2014   #19
-
0
-

#18 ZAJDAN
Proč jsi tu proměnnou nazval $column, když v ní nemáš sloupec, ale řádek?

Když správně pojmenuješ proměnné, polovina problémů se vyřeší sama.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
19. 11. 2014   #20
-
0
-

#19 Kit
protože v databazi je to jako sloupec a v tomto případě by názvy proměných neměli být zdrojem problému

Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
19. 11. 2014   #21
-
0
-

#20 ZAJDAN
V databázi to není sloupec, ale řádek.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
19. 11. 2014   #22
-
0
-

#21 Kit
?.....
foreach ($result as $column) {

 $column['uniq'] ,  $column['firstname'],  $column['lastname']....etc

}

nazvy v hranatych závorkách reprezentují v mém případě názvy sloupců v databázi, kurňa nebo už jsem tak domatenej?

Nahlásit jako SPAM
IP: 109.107.211.–
ZAJDAN0
Newbie
19. 11. 2014   #23
-
0
-

#22 ZAJDAN
vyřešeno,,,,omlouvám se, ale nečekal bych, že to způsobuje problém:
 

$result = $prepared->fetchAll(\PDO::FETCH_ASSOC);
$json = json_encode($prepared->fetchAll(\PDO::FETCH_ASSOC));


zakomentoval jsem: 

//$result = $prepared->fetchAll(\PDO::FETCH_ASSOC);
$json = json_encode($prepared->fetchAll(\PDO::FETCH_ASSOC));

a json pole už obsahuje data

kombinace s předchozím zápisem nyní taky ok: 

$result = $prepared->fetchAll(\PDO::FETCH_ASSOC);
$json = json_encode($result);

což předtím nešlo....hmmmm..divné

Nahlásit jako SPAM
IP: 109.107.211.–
Kit+15
Guru
19. 11. 2014   #24
-
0
-

#23 ZAJDAN
Nedivím se, že tě na Rootovi nemají rádi. Hodíš sem správný kus kódu, sám ho máš blbě a pak se divíš, že ti to nejede a že ti nikdo neporadí.

Jestli se chceš naučit programovat, zamysli se nad tím, z čeho se skládá tabulka.

A také se konečně nauč pojmenovávat proměnné.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ZAJDAN0
Newbie
19. 11. 2014   #25
-
0
-

#24 Kit
vložil jsem sem co jsem skutečně sám měl,
kdo chce poradí, kdo nechce nemusí...Tobě děkuji...sám si umím nasypat popel na hlavu a omluvit se...pokud ani toto nestačí, škoda, neschovám se jako anonymní nick a  dokážu se i zamyslet....jako + se snažím vracet funkční řešení, které pomůže i jiným

a s tou tabulkou to by mne opravdu zajímalo :)....názvy sloupců jsou statické a řádky ve sloupcích narůstají s přidávanými hodnotami....ale rád bych si teda ujasnil jaké tabulky v db tedy jsou, když ne takto

Jednoduchá tabulka

Tabulka nám popisuje nějakou entitu. Skládá se ze sloupců, kterým říkáme atributy a volíme takové vlastnosti, které nás o dané entitě zajímají. Představme si, že máme svou firmu, ve které nám pracují zaměstnanci. O těchto lidech si chceme vést základní osobní údaje. Zajímá nás jméno, příjmení, rodné číslo, adresa (ulice, číslo, město, psč), stav, dosažené vzdělání a zda-li vlastní řidičský průkaz skupiny B.

Nahlásit jako SPAM
IP: 109.107.211.–
ZAJDAN0
Newbie
19. 11. 2014   #26
-
0
-

#25 ZAJDAN
je to ok, když výstup z json_encode je obalen do hranatých závorek? []

na php.net se uvádí: 

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>

The above example will output:
{"a":1,"b":2,"c":3,"d":4,"e":5}

ovšem můj výstup je obalen do [ {"a":1,"b":2,"c":3,"d":4,"e":5} ]

Nahlásit jako SPAM
IP: 109.107.211.–
ZAJDAN0
Newbie
19. 11. 2014   #27
-
0
-

#26 ZAJDAN
zjistil jsem že, fetchAll() vždy vrací "2D array" a proto je to obalené do [ ]
pokud tedy potřeba získat jako objekty použije se:
json_encode($result, JSON_FORCE_OBJECT));

Nahlásit jako SPAM
IP: 185.26.182.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

Proměná hodnota — založil Jan

Označený text jako hodnota — založil Paulí

Chyba SQL dotazu — založil Radek

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý