Thomas. Skrevet 19. april 2009 Del Skrevet 19. april 2009 (endret) 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 19. april 2009 av php_user Lenke til kommentar
AlecTBM Skrevet 19. april 2009 Del Skrevet 19. april 2009 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 Lenke til kommentar
Thomas. Skrevet 19. april 2009 Forfatter Del Skrevet 19. april 2009 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
AlecTBM Skrevet 19. april 2009 Del Skrevet 19. april 2009 Linja over, du kan ikke retunere 2 ganger i en funksjon Når du ha returnert en gang så stopper det Fjern return forran mysql_connect Lenke til kommentar
Ernie Skrevet 19. april 2009 Del Skrevet 19. april 2009 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? 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
Thomas. Skrevet 19. april 2009 Forfatter Del Skrevet 19. april 2009 Nå fjernet jeg return på både mysql_connect og mysql_select_db. Og nå kom: Table 'data.'.brukere.'' doesn't exist Men det er jo en tabell som heter brukere i databasen!? Lenke til kommentar
Thomas. Skrevet 19. april 2009 Forfatter Del Skrevet 19. april 2009 etter å ha endret til dette: class select extends SQL { function select2($a, $s, $d) { return "SELECT * FROM `$this->database`.`$a` WHERE `$s` = `$d` LIMIT 1"; } Så får jeg denne erroren: Unknown column '1' in 'where clause' Lenke til kommentar
AlecTBM Skrevet 19. april 2009 Del Skrevet 19. april 2009 Riktig database? Sjekk phpmyadmin eller noe lignende Lenke til kommentar
Thomas. Skrevet 19. april 2009 Forfatter Del Skrevet 19. april 2009 Riktig database?Sjekk phpmyadmin eller noe lignende Ja, det er riktig. Lenke til kommentar
Ernie Skrevet 19. april 2009 Del Skrevet 19. april 2009 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. Lenke til kommentar
Thomas. Skrevet 19. april 2009 Forfatter Del Skrevet 19. april 2009 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 Lenke til kommentar
Ernie Skrevet 19. april 2009 Del Skrevet 19. april 2009 (endret) 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 19. april 2009 av Ernie Lenke til kommentar
Martin A. Skrevet 19. april 2009 Del Skrevet 19. april 2009 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
AlecTBM Skrevet 19. april 2009 Del Skrevet 19. april 2009 For database spørringer osv så vil jeg anbefale pear biblioteket mdb2 http://pear.php.net/package/MDB2 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå