PHP - SQL pomocí PDO

ZAJDAN

  • *****
  • 1 995
    • Zobrazit profil
    • E-mail
PHP - SQL pomocí PDO
« kdy: 23. 09. 2015, 13:34:02 »
Ahoj,
lze v syntaxi PHP- PDO používat operátory tímto způsobem?

$prepared_get_cabinetNumber = $pdo->prepare( "SELECT cabinetNumber FROM customer WHERE uniq = :uniq" )
$prepared_get_code = $pdo->prepare( "SELECT TOP 1 cabinet_" +$prepared_get_cabinetNumber "FROM code_stack" );

díky
« Poslední změna: 23. 09. 2015, 23:14:20 od Petr Krčmář »
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


Re:PHP -SQL pomocí PDO
« Odpověď #1 kdy: 23. 09. 2015, 14:17:44 »
Ahoj,
lze v syntaxi PHP- PDO používat operátory tímto způsobem?

$prepared_get_cabinetNumber = $pdo->prepare( "SELECT cabinetNumber FROM customer WHERE uniq = :uniq" )
$prepared_get_code = $pdo->prepare( "SELECT TOP 1 cabinet_" +$prepared_get_cabinetNumber "FROM code_stack" );

díky

Druhý riadok je určite syntakticky nesprávne, PHP už roky nepoužívam, ale tuším to ide minimálne dvoma spôsobmi:
Kód: [Vybrat]
$prepared_get_code = $pdo->prepare( "SELECT TOP 1 cabinet_" . $prepared_get_cabinetNumber . "FROM code_stack" );
$prepared_get_code = $pdo->prepare( "SELECT TOP 1 cabinet_{$prepared_get_cabinetNumber} FROM code_stack" );

ZAJDAN

  • *****
  • 1 995
    • Zobrazit profil
    • E-mail
Re:PHP -SQL pomocí PDO
« Odpověď #2 kdy: 23. 09. 2015, 15:22:18 »
Druhý riadok je určite syntakticky nesprávne, PHP už roky nepoužívam, ale tuším to ide minimálne dvoma spôsobmi:
Kód: [Vybrat]
$prepared_get_code = $pdo->prepare( "SELECT TOP 1 cabinet_" . $prepared_get_cabinetNumber . "FROM code_stack" );
$prepared_get_code = $pdo->prepare( "SELECT TOP 1 cabinet_{$prepared_get_cabinetNumber} FROM code_stack" );

moc díky....
zrovna to zkouším oběma způsoby, ale nedaří se...do browseru se vrací:
Status Code:500 Internal Server Error
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Kit

Re:PHP -SQL pomocí PDO
« Odpověď #3 kdy: 23. 09. 2015, 15:55:03 »
Ahoj,
lze v syntaxi PHP- PDO používat operátory tímto způsobem?
Kód: [Vybrat]
$prepared_get_cabinetNumber = $pdo->prepare( "SELECT cabinetNumber FROM customer WHERE uniq = :uniq" )
$prepared_get_code = $pdo->prepare( "SELECT TOP 1 cabinet_" + $prepared_get_cabinetNumber + "FROM code_stack" );

Takhle to určitě nejde, protože metoda prepare() není žádné makro, aby se něco takového dalo slepovat. Proč to nedáš do jednoho uceleného dotazu?

ZAJDAN

  • *****
  • 1 995
    • Zobrazit profil
    • E-mail
Re:PHP -SQL pomocí PDO
« Odpověď #4 kdy: 23. 09. 2015, 15:55:38 »
tak jsem odhalil prvni pricinu problemu
1) mysql neumi klausuly TOP namisto toho se tam pouziva LIMIT
2) ta dosazena promena v SQL dotazu obsahuje pdo sql, ktery se vlastne jeste nevykonal a proto si myslim, ze je potreba ho nejdrive vykonat a pote i fetchnout do promene a teprve tu dosazovat

nyni to mam tedy takto:
Kód: [Vybrat]
$prepared_get_cabinetNumber = $pdo->prepare( "SELECT cabinetNumber FROM customer WHERE uniq = :uniq" );
 $prepared_get_cabinetNumber->bindParam(':uniq', $uniq, PDO::PARAM_STR);
 $prepared_get_cabinetNumber->execute();
 $result = $prepared_get_cabinetNumber->fetchAll();

  $prepared_get_code = $pdo->prepare( "SELECT cabinet_". $result . "FROM code_stack LIMIT 1" );
  $prepared_get_code->execute();

ale vrací to:
Connection failed: SQLSTATE[]: Column not found: 1054 Unknown column 'cabinet_ArrayFROM' in 'field list'

coz bude pravdepodobne zpusobene ze fetchAll(); vrací pole
no kurna to jeste budou speky :)
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


Kit

Re:PHP -SQL pomocí PDO
« Odpověď #5 kdy: 23. 09. 2015, 16:32:16 »
no kurna to jeste budou speky :)

Tak si konečně přestaň hrát s kabinety a udělej to stejně, jak to dělají ostatní.

ZAJDAN

  • *****
  • 1 995
    • Zobrazit profil
    • E-mail
Re:PHP -SQL pomocí PDO
« Odpověď #6 kdy: 23. 09. 2015, 17:41:08 »
tak vyreseno....
$result(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR);

to mi varti element z pole jako string a pak uz se pekne dosazuje:
$prepared_get_code = $pdo->prepare( "SELECT cabinet_". $result . "FROM code_stack LIMIT 1" );

cimz vznikne sql dotaz  "SELECT cabinet_1 FROM code_stack LIMIT 1"

proc jsem to nemohl delat jako ostatní? protoze tech cabinetu mam 1000 a ja nevim ktery se mi do promene dostane a nez abych psal 1000 SQL podminek tak si na konec indexu sloupce dosadim promenou.
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

pepa

Re:PHP -SQL pomocí PDO
« Odpověď #7 kdy: 23. 09. 2015, 17:43:59 »
ano mysql neni totiz mssql a jeste takova vec krom limit umi i offset ten mssql uz teda taky ale neni tomu tak dlouho

Kit

Re:PHP -SQL pomocí PDO
« Odpověď #8 kdy: 23. 09. 2015, 17:58:02 »
proc jsem to nemohl delat jako ostatní? protoze tech cabinetu mam 1000 a ja nevim ktery se mi do promene dostane a nez abych psal 1000 SQL podminek tak si na konec indexu sloupce dosadim promenou.

Otázka zněla: Proč máš 1000 kabinetů místo jednoho?

ZAJDAN

  • *****
  • 1 995
    • Zobrazit profil
    • E-mail
Re:PHP -SQL pomocí PDO
« Odpověď #9 kdy: 23. 09. 2015, 18:23:12 »
protože těch cabinetů skutečne 1000 je
jde o skříně, které se pronajímají zákazníkům
ve skutečnosti to vypadá tak, že mi přijde do jedné z proměnéných ID zákazníka (požadavek na změnu kodu)
pomocí ID si z jedné tabulek databáze vytáhnu jakou má přidělenou skříň a výsledek je uložen do proměné
právě do té, kterou jsem tady řešil
a já nemusím psát na každou skříň dotaz/podmínku, ale pomocí proměné dosadím konec indexu sloupce a hrábne to pro kód tak kam je potřeba

každá skříň má speciální elektronický číselný zámek s předdefinovanou bankou kodů a nelze je používat náhodně, ale postupně
1010,1020,1030,1040 ...prvni volny v cestě je 1010..pokud bych vzal ten 1040, tak všechny před ním se deaktivují (by výrobce)
proto v tom SQL dotazu LIMIT 1

v dalším kroku nově přidělený kod insertnu do další tabulky code_used + kdo kdy,etc a nakonec tento kod z tabulky code_stack smaznu...již použitý kod se nesmí použít znovu
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Kit

Re:PHP -SQL pomocí PDO
« Odpověď #10 kdy: 23. 09. 2015, 18:55:04 »
protože těch cabinetů skutečne 1000 je

Těch 1000 cabinetů přece může být v jedné jediné tabulce. Nevidím důvod k tomu, aby těch tabulek bylo 1000.

ZAJDAN

  • *****
  • 1 995
    • Zobrazit profil
    • E-mail
Re:PHP -SQL pomocí PDO
« Odpověď #11 kdy: 23. 09. 2015, 18:57:54 »
tabulka code_stack  je zasobnikem pro vsechny cabinety
co sloupec v teto tabulce to jedna skrin
kazde prirazeni kodu se v patricnem sloupci vystreli jeden radek ...jako v revolveru :_)
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Rejpal

Re:PHP -SQL pomocí PDO
« Odpověď #12 kdy: 23. 09. 2015, 19:00:02 »
To cele je spatne. Prijde dalsi skrin a budes menit kvuli tomu schema db? To je prece nesmysl. Mel bys to udelat jako ostatni a prostudovat si http://www.w3schools.com/sql/sql_foreignkey.asp

ZAJDAN

  • *****
  • 1 995
    • Zobrazit profil
    • E-mail
Re:PHP -SQL pomocí PDO
« Odpověď #13 kdy: 23. 09. 2015, 19:09:58 »
muj ucel to splnilo...
kazda nova skrin ma svuj zasobnik kodu, ktery se tak i tak musi do tabulky nasadit....takze udelam novy sloupec a nasypu do nej hodnoty..zadna veda
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Kit

Re:PHP -SQL pomocí PDO
« Odpověď #14 kdy: 23. 09. 2015, 19:12:29 »
tabulka code_stack  je zasobnikem pro vsechny cabinety
co sloupec v teto tabulce to jedna skrin
kazde prirazeni kodu se v patricnem sloupci vystreli jeden radek ...jako v revolveru :_)

Totéž se dá daleko elegantněji udělat v jedné tabulce. Jediným UPDATE či DELETE provedeš ověření kódu a zároveň i jeho zneplatnění, aby již nemohl být znovu použit.