Gå til innhold

Trøbbel med OOP


Anbefalte innlegg

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\wamp\www\prosjekter\mafiasosV2\index.php on line 22

No database selected

 

Er hva jeg får ut av denne koden:

 

@define("ID", $_SESSION['id']);

	$sql = mysql_query($select -> select2('brukere', 'id', ID));

	 while($row = mysql_fetch_object($sql) or die(mysql_error())) {
		 echo $row['nick'];
	 }

 

 

Over dette finner du da:

 

	 class SQL {

	 var $host	 = "localhost";
	 var $user	 = "root";
	 var $pass	 = "";
	 var $database = "data";

	 public function connect() {

		 return mysql_connect($this->host, $this->user, $this->pass) or die('SQL-feil: ' . mysql_error());
		 return mysql_select_db($this->database) or die('Kunne ikke velge database: '. mysql_error());

	 }

 }

	 class select {

		 function select2($a = '', $s = '', $d = '') {

			 $sql = "SELECT * FROM `'.$a.'` WHERE `'.$s.'` = `'.$d.'` LIMIT 1";

			 return $sql;

		 }

	 }

$sql = new SQL;
$select = new select;	
$sql->connect();

 

Så, har dere noe forslag på hva som kan være feil?

Endret av php_user
Lenke til kommentar
Videoannonse
Annonse
Som feilmeldingen sier:

mysql_fetch_object(): supplied argument is not a valid MySQL result resource

Altså, det er en feil i spørringen

legg til

or die(mysql_error());

 

Og du trenger ikke mysql_error på fetch

 

No database selected.

 

 

Er det noe feil med denne koden da?

return mysql_select_db($this->database) or die('Kunne ikke velge database: '. mysql_error());

Lenke til kommentar

 public function connect() {

		 return mysql_connect($this->host, $this->user, $this->pass) or die('SQL-feil: ' . mysql_error());
		 return mysql_select_db($this->database) or die('Kunne ikke velge database: '. mysql_error());

	 }

Hva er det du holder på med her? :huh: Altså, return returnerer en verdi fra funksjonen. Det går ikke an å gjøre det to ganger i og med at funksjonen avsluttes ide man gjør det. En annen ting er at jeg stusser veldig på hviklen PHP-versjon du programmerer for. Å definere variabler i klasser med var tilhører OOP type PHP4, mens du definerer en funksjon som public noe som tilhører OOP type PHP5. Å mikse tingene slik anser iallfall jeg som ikke spesielt pent. Enten programmerer man ut fra OOP i PHP4 eller ut fra PHP5.

Lenke til kommentar
Hva med å bare fjerne begge return fra den orginale koden? Kan ikke helt se poenget med å ha de der for så si det sånn.

 

			function select2($a, $s, $d) {

			"SELECT * FROM `$this->database`.`$a` WHERE `$s` = `$d` LIMIT 1";

		}

 

 

Resultat:

Query was empty

 

:ermm:

Lenke til kommentar

Nå tenkte jeg på connect-funksjonen i SQL-klassen.

 

Red.: Nei, nå følger jeg dårlig med her gitt. Problemet er såklart ikke det, det er denne linjen:

$sql = "SELECT * FROM `'.$a.'` WHERE `'.$s.'` = `'.$d.'` LIMIT 1";

Problemet er at du bruker enkelt-fnutter rundt $a, $s og $d mens stringen er definert med dobbeltfnutter, hvilket medfører at du ender opp med en spørring som ser slik ut:

SELECT * FROM `'.verdi-fra-a.'` WHERE `'.verdi-fra-s.'` = `'.verdi-fra-d.'` LIMIT 1

 

Red.2: Videre har du også et problem med at verdien fra $d ikke er noen kolonne mens du alikevel benytter ` brukes for å indikere kolonne-navn. Byttes de ut med ' blir det nok litt bedre.

Endret av Ernie
Lenke til kommentar

Hvorfor lager du en klasse for hver ting du skal gjøre?

 

class SQL
{
private $connectionID;
private $query;

function __construct( $user, $pass, $host, $database )
{
	$this->connectionID = mysqli_connect( $host, $user, $pass, $database ) OR die( mysqli_connect_error() );
}

public function select( $what, $from, $where )
{
	$this->query = mysqli_query( $this->connectionID, "SELECT {$what} FROM {$from} WHERE {$where}" ) or die( mysqli_error( $this->connectionID );

	return $this->query;
}

public function fetch()
{
	if( $this->query )
	{
		return mysqli_fetch_array( $this->query )
	}
}
//... etc
}

$sql = new SQL( 'user', 'pass', 'localhost', 'database' );

$sql->select( 'a,b,c,d', 'users', 'a=b AND c=d' );
$row = $sql->fetch();

print_r( $row );

Relativt utestet.

 

Eller finn deg et rammeverk som allerede gjør dette, om du ikke har planer om å lære deg OOP.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...