Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MSSQL] Zmiana PHP, problem z PDO
adi456
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 21.01.2010
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Witam

Zmieniam wersje PHP z 5 na 7 dla starego projektu, problem że kodu jest bardzo dużo muszę dopisać brakujące funkcje, największym problemem na jaki aktualnie natrafiłem to zapytania mssql w pętli innego zapytania, pętla wykonuje się tylko raz ponieważ kolejne zapytanie mssql które jest w pętli wszystko psuje, żeby było jaśniej poniżej funkcje jakie sobie dopisałem dla zachowania kompatybilności

  1. function query_mssql($sql){
  2. try {
  3. $mssql = new PDO ("dblib:host=$server;dbname=$dbname","$username","$pw");
  4. } catch (PDOException $e) {
  5. echo '<font style="color:red;">Błąd MSSQL: ' . $e->getMessage();
  6. }
  7.  
  8. if(!empty($mssql)){
  9. try {
  10. $stmt=$mssql->prepare($sql);
  11. $stmt->execute();
  12. } catch (PDOException $e) {
  13. echo '<font style="color:red;">Błąd mssql: ' . $e->getMessage();
  14.  
  15. }
  16. }
  17. return $stmt;
  18. }
  19.  
  20.  
  21. function mssql_fetch_assoc($co){
  22. return $co->fetch();
  23. };
  24. function mssql_fetch_array($co){
  25. return $co->fetch();
  26. };
  27. function mssql_query($co){
  28. return query_mssql($co);
  29. };
  30. function mssql_num_rows($co){
  31. $ile=count($co->fetchAll());
  32. query_mssql($co->queryString); // bez tego niszczy sql/zmienną query tak samo jak zapytania w pętli
  33. return $ile;
  34. }


zauważyłem że PDO to trochę inna zasada działania, to co przypisuje do zmiennej z mssql_query przepada po kolejnym użyciu tej funkcji da się to obejść?

przykład problemu (wyświetli tylko 1 TowId zamiast 2 ):
  1. $q=mssql_query("SELECT TOP 2 TowId FROM dbo.Towar");
  2. while($r=mssql_fetch_array($q)) {
  3. print_r($r);
  4. $q2=mssql_query("SELECT TOP 2 Skrot FROM dbo.Kontrahent");
  5. while($r2=mssql_fetch_array($q2)) {
  6. print_r($r2);
  7. }
  8. }


w zasadzie to PDO kompletnie nie ma sensu albo czegoś nie rozumiem, bo np jeśli w pętli wykonują się różne operacje i przypadkowo będzie tam gdzieś funkcja i kolejne zapytanie PDO to program będzie działać niepoprawnie? chyba to znak żeby unikać tego jak ognia (IMG:style_emoticons/default/tongue.gif) chyba zacznę przerabiać kod bo nie widzę rozwiązania

Ten post edytował adi456 17.04.2019, 13:37:55
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
przykład problemu (wyświetli tylko 1 TowId zamiast 2 ):

Twoj przyklad jest totalnie bez sensu bo wewnatrz petli caly czas pobierasz te same rekordy wiec rownie dobrze mozesz je pobrac przed petla.
Jesli zas masz faktycznie jakis konkretny problem to pokaz ten konkretny problem


Cytat
function mssql_num_rows($co){
$ile=count($co->fetchAll());
query_mssql($co->queryString); // bez tego niszczy sql/zmienną query tak samo jak zapytania w pętli
return $ile;
}

Zabijesz kiedys serwer takimi potworkami. Moze pokaz konkretne przyklady a powiemy ci jak je poprawic


Zas co do brakujacych rekordow w petli to wlacz moze buforowanie. Nawet sterownik mysql w PDO sie wywalalal na takich zapytaniach. Generalne jak juz wspomniano takich potworkow nie powinno sie tworzyc

edit: no i to tworzenie nowego polaczenia tylko po to by wykonac kolejne zapytanie do bazy... to chyba jakis zart?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 13:12