Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: if mi się zepsuł
Forum PHP.pl > Forum > PHP
frelo
  1. <?php
  2.  
  3. function query( $sql ) {
  4.     global $conn;
  5.     $rs = $conn->Execute( $sql );
  6.     print_r( $rs );
  7.     if ( ! $rs ) {
  8.         die( 'error' );
  9.     }
  10.     return $rs;
  11. }
  12.  
  13. ?>

poprawiam
---
nospor



Funkcja jak funkcja, zwraca record set ($rs) ADODB. Ciekawe jest to, że najpierw print_r() wyświetla $rs, a w następnej linijce już tego $rs'a nie i odpala die():

ADORecordSet_mysqli Object ( [databaseType] => mysqli [canSeek] => 1 [dataProvider] => native [fields] => Array ( [sectionId] => 533 [languageId] => 1 [baseVersionId] => 526 [parentId] => 1 [contentTypeId] => 1 [name] => Strona g?ówna [shortDescription] => [longDescription] => [activity] => 1 [toDelete] => 0 [position] => 1 [depth] => 1 ) [blobSize] => 100 [sql] => SELECT * FROM sections where sectionId='533' [EOF] => [emptyTimeStamp] => [emptyDate] => [debug] => [timeCreated] => 0 [bind] => [fetchMode] => 1 [connection] => ADODB_mysqli Object ( [databaseType] => mysqli [dataProvider] => native [hasInsertID] => 1 [hasAffectedRows] => 1 [metaTablesSQL] => SHOW TABLES [metaColumnsSQL] => SHOW COLUMNS FROM %s [fmtTimeStamp] => 'Y-m-d H:i:s' [hasLimit] => 1 [hasMoveFirst] => 1 [hasGenID] => 1 [isoDates] => 1 [sysDate] => CURDATE() [sysTimeStamp] => NOW() [hasTransactions] => [forceNewConnect] => [poorAffectedRows] => 1 [clientFlags] => 0 [substr] => substring [port] => [socket] => [_bindInputArray] => [nameQuote] => ` [_genIDSQL] => update %s set id=LAST_INSERT_ID(id+1); [_genSeqSQL] => create table %s (id int not null) [_genSeq2SQL] => insert into %s values (%s) [_dropSeqSQL] => drop table %s [database] => orzel [host] => localhost [user] => root [password] => rootpass [debug] => [maxblobsize] => 262144 [concat_operator] => + [length] => length [random] => rand() [upperCase] => upper [fmtDate] => 'Y-m-d' [true] => 1 [false] => 0 [replaceQuote] => \' [charSet] => [metaDatabasesSQL] => [uniqueOrderBy] => [emptyDate] => [emptyTimeStamp] => [lastInsID] => [hasTop] => [readOnly] => [genID] => 0 [raiseErrorFn] => [cacheSecs] => 3600 [arrayClass] => ADORecordSet_array [noNullStrings] => [numCacheHits] => 0 [numCacheMisses] => 0 [pageExecuteCountRows] => 1 [uniqueSort] => [leftOuter] => [rightOuter] => [ansiOuter] => [autoRollback] => [fnExecute] => [fnCacheExecute] => [blobEncodeType] => [rsPrefix] => ADORecordSet_ [autoCommit] => 1 [transOff] => 0 [transCnt] => 0 [fetchMode] => [_oldRaiseFn] => [_transOK] => [_connectionID] => mysqli Object ( ) [_errorMsg] => [_errorCode] => [_queryID] => mysqli_result Object ( ) [_isPersistentConnection] => 1 [_evalAll] => [_affected] => [_logsql] => [databaseName] => orzel ) [_numOfRows] => 1 [_numOfFields] => 12 [_queryID] => mysqli_result Object ( ) [_currentRow] => 0 [_closed] => [_inited] => 1 [_obj] => [_names] => [_currentPage] => -1 [_atFirstPage] => [_atLastPage] => [_lastPageNo] => -1 [_maxRecordCount] => 0 [datetime] => [adodbFetchMode] => 2 ) error

Kto to zrozumie ten jest gość. party.gif

Chyba if mi się zepsuł dry.gif Wszystko łyka oprócz false. Apache'a restartowałem bez efektu. Działam na Windows 2003.
Adiasz
sprawdz czy czasami nie wywolujesz funkcji query 2 razy i dla pierwszego zapytania zwraca tablice a dla drugiego bad? :-)
dr_bonzo
Zmien tytul topicu - ten jest niezgodny z regulaminem!!!


uzyj:
  1. <?php
  2. if ( $rs === FALSE )
  3. {
  4.  die(...);
  5. }
  6. ?>
frelo
Adiasz: zastanów się co piszesz. Dr_bonzo: bez zmian.

Najciekawsze że tej funkcji używam od jakiegoś czasu, dzisiaj mi się nagle zepsuła.
Adiasz
Cytat(frelo @ 2006-03-27 13:08:42)
Adiasz: zastanów się co piszesz

hmm...przedstawiles swoj problem a ja Ci napisalem jaka moze byc tego przyczyna wiec nad czym mam sie zastanawiac?
nospor
Moim zdaniem Adiasz wysunął calkiem możliwą teorię. Ty nam nie pokazales jak uzywasz tej funkcji, tylko co masz w srodku. A w przypadky, gdy dostaniesz false, to print_r nic nie zwroci wiec tego nie widac. Wiec ty sie zastanow co piszesz. if dziala bez zarzutu

zeby miec pewnosc zrob se prosty test. wyswietl tą zmienną jeszcze raz przed die(). jesli pojawic ci sie drugi raz tablica, znaczy ze faktycznie if źle dziala. jesli nie, znaczy ze Adiasz ma racje winksmiley.jpg

  1. <?php
  2. function query( $sql ) {
  3. global $conn;
  4. $rs = $conn->Execute( $sql );
  5. echo 'Przed IF:';
  6. print_r( $rs );
  7. if ( ! $rs ) {
  8. echo 'W IF:';
  9. print_r( $rs );
  10. die( 'error' );
  11. }
  12. return $rs;
  13. }
  14. ?>
frelo
Ludzie! Przecież napisałem, że najpierw $rs jest, a w następnej linijce kodu już go nie ma! aaevil.gif

  1. <?php
  2.  
  3. print_r( $rs ); // pokazuje $rs'a, wyzej jest wydruk
  4. if ( ! $rs ) {
  5. die( 'error' ); // die odpala
  6. }
  7.  
  8. ?>


Inna sprawa że teraz wydruk $rs'a z print_r() urywa się w połowie. Jakieś cuda się dzieją, resetuję komputer.
nospor
Cytat
Ludzie! Przecież napisałem...

Człowieku! Przeciez mi ci wyraźnie piszemy co może byc tego przyczyną.
Ty nam pokazales kod funkcji. a my ci mowimy, ze gdy ją źle wywolasz to takie krzaczki będziesz mial. Przyklad:
Masz funkcję:
  1. <?php
  2.  
  3. function funk( $tab ) {
  4.     $rs = $tab;
  5.     print_r( $rs );
  6.     if ( ! $rs ) {
  7.         die( 'error' );
  8.     }
  9.     return $rs;
  10. }
  11. ?>

I wiesz co mi ta funkcja zwraca? Proszę:
Cytat
Array ( [0] => 2 [1] => 3 [2] => 4 ) error
Jaki wniosek? że $rs jest a zaraz po ifie nie ma. Tak myslisz? Nic bardziej blędnego. Oto w jaki sposob ją wywolalem:
  1. <?php
  2. funk(array(2,3,4));
  3. funk(false);
  4.  
  5. ?>
Rozumiesz juz? Nas interesuje jak to wywolujesz. moze jakis refresh ci sie robi.
A wystarczy ze zmienisz funkcje o takie poprawki i bedzie wszystko jasne:
  1. <?php
  2. function funk( $tab ) {
  3.     $rs = $tab;
  4.     echo 'przed IF:';
  5.     print_r( $rs );
  6.     if ( ! $rs ) {
  7.         echo 'w IF:';
  8.         print_r( $rs );
  9.         die( 'error' );
  10.     }
  11.     return $rs;
  12. }
  13.  
  14. ?>

Cytat
przed IF:Array ( [0] => 2 [1] => 3 [2] => 4 ) przed IF:w IF:error

No ale latwiej jest nakrzyczec, niz sprobowac sie zastanowic...
więc jesli będziesz na tyle łaskawy i wprowadzisz te poprawki o które prosilem, byloby super smile.gif No i pokaz co wowczas wyswietla
frelo
Zgadza się, nie zastanowiłem się nad tym konceptem wielokrotnego wywołania. Ale to nie było to, bo w pewnym momencie momencie miałem jeszcze przed if'em print_r( $sql ) tak że widziałbym sql nawet jeśli nie byłoby $rs'a. W każdym razie apache najwyraźniej wyzdrowiał bo dzisiaj już wszystko działa. cool.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.