ugrás a tartalomhoz

Php5 vs mysql

C_hris · 2008. Jan. 6. (V), 20.23
Sziasztok!

Van egy mysql kezelő objektumom ami tökéletesen működött PHP 4 alatt, de az 5-ös verziónál nem minden lekérdezésnél működik.

A DBNumrows-nál és a DBFetchrow metódus hívásánál valamikor nem létezik a lekérdezés eredménye (supplied argument is not a valid MySQL result )

Mi okozhatja ezt a problémát már próbáltam a mysqli-t is hátha csak azzal működik a php5, de azzal se működik (Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in...)

Az biztos, hogy minden lekérdezés jó, mert kipróbáltam mysql kliensben.

class DBObject{

      var $dhost;
      var $duser;
      var $dpass;
      var $dname;
      
      var $DBCon;
      var $query;
      var $rowcount;
      var $result;
      var $row;
      
      var $MYSQL_I=false;

      function DBObject()
               {
               global $dbhost;
               global $dbuser;
               global $dbpassword;
               global $dbname;
               
               $this->dhost= $dbhost;
               $this->duser= $dbuser;
               $this->dpass= $dbpassword;
               $this->dname= $dbname;
               }


      function GetRowCount()
               {
               return $this->rowcount;
               }
               
      function SetSQL($sql)
               {
               $this->query=$sql;
               }

      function DBConnect()
	      {
	      if(!$this->MYSQL_I)
	      	{      	     	      	
	      	$this->DBCon=mysql_connect($this->dhost, $this->duser, $this->dpass);      	
	      	mysql_select_db($this->dname,$this->DBCon);         		
	      	}
	      else 
	      	{
	      	$this->DBCon=mysqli_connect($this->dhost, $this->duser, $this->dpass);
	      	mysqli_select_db($this->DBCon,$this->dname);	
	      	}      		      
	      }


      function DBDisconnect()
	      {
	      if(!$this->MYSQL_I)
	      	mysql_close($this->DBCon);
	      else 
	      	mysqli_close($this->DBCon);
	      }

      function DBQuery()
	      {
	       if(!$this->MYSQL_I)
	      	$this->result =mysql_query($this->query, $this->DBCon);
	      else 	      	
	      	$this->result =mysqli_query($this->DBCon,$this->query);	      	
	      	      	
	      }

      function DBNumrows()
	      {	      	
	      if(!$this->MYSQL_I)
	      	$this->rowcount=mysql_num_rows($this->result);
	      else 
	      	$this->rowcount=mysqli_num_rows($this->result);
	      	
	      return $this->rowcount;
	      }

       function DBFetchrow()
	       {
	       if(!$this->MYSQL_I)
	       	$this->row = mysql_fetch_row($this->result);
	       else 
	       	$this->row = mysqli_fetch_row($this->result);
	       	
	       return $this->row;
	       }

       function DBFetcharray()
	       {
	       $this->row = array();
	       if(!$this->MYSQL_I)
	       	$this->row = mysql_fetch_array($this->result);
	       else 
	       	$this->row = mysqli_fetch_array($this->result);
	       	
	       return $this->row;
	       }


       function DBFetchobject()
	       {
	       if(!$this->MYSQL_I)
	       	$this->row = mysql_fetch_object($this->result);
	       else 
	       	$this->row = mysqli_fetch_object($this->result);
	       	
	       if($this->row) return $this->row;
	       else return false;
	       }

       function DBFreeres()
	       {
	       if(!$this->MYSQL_I)
	       	$row = mysql_free_result($this->result);
	       else 
	       	$row = mysqli_free_result($this->result);
	       }

       }
 
1

Naplózás, hibakezelés

zila · 2008. Jan. 6. (V), 23.04
Ha érvénytelen resultset-et kapsz, akkor az úgy van. Én úgy látnék neki a megoldának, hogy az sql-eket naplóznám (abban a formában ahogy a db felé elmennek, behelyettesített értékekkel stb.), elképzelhető, hogy valamelyik paraméter rontja el a query-t (pl nem escape-lsz egy inputot és idézőjel/aposztróf kerül bele). Meg úgy általában nem nagyon látok hibakezelést a kódodban, az sem ártana bele...
2

...

C_hris · 2008. Jan. 6. (V), 23.48
De PHP 4 alatt miért működik rendesen, elvileg ugyanúgy kellene kezelnie a függvényeket nem?
5

Irreleváns

zila · 2008. Jan. 7. (H), 10.17
Felesleges ezen lovagolni, hogy php4 alatt ment. Most nem megy, ki kell deríteni az okát. (lehet, hogy php4 alatt be volt kapcsolva pl. a magic_quotes_gpc php5 alatt meg nem, te pedig nem foglalkoztál a felhasználótól jövő adatok escape-elésével)
3

...

C_hris · 2008. Jan. 7. (H), 10.09
Arra sikerült rájönnöm, hogy ott van gond ahol a lekérdezésben egy stringet keresek
pl. ... where valami='szöveg'
Létezik ilyen, hogy ezt nem képes kezelni az 5-ös php?
4

Nem létezik

zila · 2008. Jan. 7. (H), 10.14
Komolyan azt hiszed, hogy php5-ben nem lehet ilyen lekérdezést használni?

Konkrét példát kellene beírnod ide nem csak valami dummy-t. És természetesen a lekérdezés után egy mysql_error() hívással az sql hibaüzenetét is meg kellene nézni (ha false-t ad vissza a query)
6

mysql error

C_hris · 2008. Jan. 7. (H), 10.21
a mysql error ezt dobja vissza: Illegal mix of collations (latin2_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '<>'
7

Sikerült

C_hris · 2008. Jan. 7. (H), 10.27
mysql_query("set names 'latin2'",$this->DBCon); megoldotta a problémát.
Köszi mindenkinek.
8

Na végre

zila · 2008. Jan. 7. (H), 10.28
Na végre eljutottunk valami konkrétumig :)
Én még nem találkoztam ezzel a hibával (igaz mysql-lel nem dolgozom már vagy 2 éve...) így csak a google-t tudom javasolni:

http://www.google.com/search?client=safari&rls=en-us&q=mysql+Illegal+mix+of+collations&ie=UTF-8&oe=UTF-8

Mondjuk ezzel kellett volna kezdened és akkor nem futunk felesleges köröket (persze a mysql verzióját még mindig nem árultad el)