Kvalitní hosting pro WordPress [WP3]
Zobrazují se odpovědi 1 až 13 z 13

[PHP] PDO dblib vrací jiné výsledky než SQL server managment?

  1. Už 2-3 hodinu si lámu hlavu s pro mě nepochopitelným problémem.

    Používám knihovnu PDO s driverem dblib pro spojení s Ms Sql databází. Snažím se pomocí SQL dotazu vytáhnout data z db.

    SQL dotaz má tuto strukturu:
    Kód:
    SELECT 
    a.id,
    a.test,
    (SELECT SUM(b.pocet) FROM tabulkab b WHERE b.id=a.id) as 'data'
    FROM tabulkaa a
    Když zadám SQL dotaz do SQL server managment, tak se mi vrátí správný výpis dat. Pokud dotaz pošlu přes PHP PDO, tak hodnota 'data' je VŽDY null. Data ze sloupců a.id, a.test jsou v pořádku.

    Dotazy jsou úplně stejné, databáze taky, vše jsem ověřoval ale prostě pro sloupec data vrací PDO vždy NULL. Je možné, že PDO nedokáže pracovat s dotazem, který obsahuje "subdotaz" takového typu a jednoduše vyhodí NULL?

    Budu moct vděčný za pomoct, protože jsem vyčerpal všechny nápady. Na googlu se mi nic podobného nepodařilo dohledat.

  2. Co se právě děje na Webtrhu?
  3. Nevidim moc duvod, proc by to SQL nemelo fungovat (pokud pro kazde a.id existuje alespon jeden b.id, ktery ma zaroven dekadickou hodnotu v b.pocet).
    Co uvazuju obecne, tak kdyz subselect vraci vice vysledku nez jeden, pak je mozne, ze v data budou NULL. To se da otestovat LIMITem v subselectu.

    Pokud toto vrati neNULLovou hodnotu v data, pak puvodni subselect bez limitu vraci vice vysledku, ktere driver konvertuje na NULL.
    Kód:
    SELECT 
    a.id,
    a.test,
    (SELECT SUM(b.pocet) FROM tabulkab b WHERE b.id=a.id LIMIT 1) as 'data'
    FROM tabulkaa a
    Pripadne bych zkusil do subselectu pridat podminku b.pocet > 0 nebo b.pocet IS NOT NULL pro vyloceni neplatnych hodnot.

    Hodne zdaru, obcas je to magie :)

  4. Subdotaz vrací pouze jednu hodnotu, takže v tom problém nebude.
    Já prostě nechápu, jak můžu zadat stejný SQL dotaz se stejnými hodnotami do SQL MS a vyjede mi jiný výsledek pro sloupec data než když data vypíšu přes PDO.

  5. Citace Původně odeslal bingoplayer Zobrazit příspěvek
    Subdotaz vrací pouze jednu hodnotu, takže v tom problém nebude.
    Já prostě nechápu, jak můžu zadat stejný SQL dotaz se stejnými hodnotami do SQL MS a vyjede mi jiný výsledek pro sloupec data než když data vypíšu přes PDO.
    PS: Koukam... dobra volba :) na stackoverflow se s tim snad nekdo setkal a poradi vic:
    PHP PDO dblib return another result than SQL server managment? is it possible?…
    Naposledy upravil skorozacatecnik : 07.08.2018 v 03:48

  6. Jedine co ma napada je to ze MS je znamy svojimi ne-sandardnostami v naprosto kazdom standarde ktory implementoje, takze je mozne ze priamy dopyt ti spracuje v pohode ale cez pdo vrstvu sa strati nejaka informacia kvoli nestandardnej strukture? Eventuelne problem vo verziach a kompatibilite?

  7. Bohužel se zdá, že se PDO opravdu vypisuje data špatně při "subdotazu".

    Vyzkoušel jsem SQL server managment, HeidiSql a nakonec i PHP sqlsrv a všechny zobrazují pro dotaz stejné (správné) data. Pouze PDO dblib zobrazuje ve sloupci data hodnotu NULL (se stejným dotazem).


  8. Dej sem i na SO minimální příklad - export db a php kód

  9. Me to taky zajima. Muzes nekam nahrat kus kodu?

  10. Kód:
    SELECT 
    a.id,
    a.test,
    (SELECT SUM(b.pocet) FROM tabulkab b WHERE b.tabulkaa_id=a.id LIMIT 1) as 'data'
    FROM tabulkaa a
    id v tabulkaa bude mít v tabulkab asi jiné jméno než id?...

  11. a preco vobec pouzivas subselect ?
    Kód:
    SELECT 
    a.id,
    a.test,
    SUM(b.pocet) as 'data'
     FROM tabulka a inner join tabulkab b on a.id=b.id
    group by a.id, a.test

  12. Tento SQL dotaz jsem uvedl pouze jako ukázku, abych mohl problém popsat. Originální dotaz má join do cca 7 tabulek, takže by bez znalosti databáze a jejich tabulek nedával smysl (proto jsem zde ani nesdílel data z databáze).

  13. Kód:
    SELECT
    a.id,
    a.test,
    (SELECT SUM(b.pocet) FROM tabulkab b WHERE b.id=a.id) AS data
    FROM tabulkaa a
    Podle mne by to však mělo vypadat takhle:
    Kód:
    SELECT a.id, a.test, SUM(b.pocet) AS data FROM tabulkaa a LEFT JOIN tabulkab b ON a.id=b.id;

Hostujeme u Server powered by TELE3