Jester73Medlem sedan mars 2012121 inlägg Hej
Jag försöker bygga en bra databas class med mysqli och har redan kört fast :e
class dbops {
static $connect;
public function __construct() {
if(self::$connect===FALSE){
self::$connect=new mysqli(DBHOST,DBUSER,DBPASSW,DBASE)or die("Kan inte ansluta");
}
if(self::$connect->connect_error()){
die("Får ej kontakt med databasen");
}
}
Konstanterna ligger i en include php som jag tar in med require_once och det verkar funka.
If satsen vill inte hänga med alls. Jag vill att den skall kolla om en länk är etablerad till databasen och om inte, sätta upp en ny.
Får bara en blank sida när jag instansierar denna class, inte något felmeddelande alls trots att jag har satt in E.ALL i PHP ini
Visst är det så att om jag skulle skapa 2 instanser i ett script jag kör så skulle det skapa två länkar till databasen?
metalboyMedlem sedan jan. 2005953 inlägg För att få till så att felmeddelanden visas så ska error_reporting vara satt till E_ALL (inte E.ALL som du har skrivit), du behöver dessutom sätta display_errors till On i php.ini. Har du gjort det?
Efter ändringar i php.ini måste du starta om webbservern.
Angående din kod:
I den kod du visar här så saknas ett }-tecken. Du avslutar aldrig funktionen.
Om du skapar två instanser av dbops så kommer det bara att skapas en länk till databasen eftersom du använder en statisk medlemsvariabel för att hålla reda på databaslänken. Vill du att varje instans av dbops ska ha en egen länk kan du inte använda static.
Din första if-sats kommer inte att uppfyllas eftersom du inte sätter $connect till false någonstans. Innan den är definierad har den värdet null.
Din andra if-sats genererar ett felmeddelande eftersom connect_error är en variabel, inte en funktion. Ta bort parenteserna.
http://php.net/manual/en/mysqli.connect-error.php
Jester73Medlem sedan mars 2012121 inlägg Tack, nu funkar det nästan
Hade satt E_ALL, hade bara glömt att det var _ istället för . när jag skrev texten :)
och } berodde på att jag klippte exemplet lite kort.
Några följdfrågor av nyfikenhet.
Visst är det så att jag kan använda self::$connect i alla funktioner i classen?
Varför 3 st =, trodde att det räckte med 2? Har inte hittat någon svar ute på nätet :)
prplxrMedlem sedan juni 2012582 inlägg === är strikt jämförelse, dvs utan type casting.
0 konverteras till false vid jämförelse med ==, men inte med ===, då är det fortfarande talet 0.
Alltså:
0 == false
0 !=== false
Jester73Medlem sedan mars 2012121 inlägg Tackar, har plöjt en hel del PHP böcker m.m och aldrig stött på detta :)
prplxrMedlem sedan juni 2012582 inlägg Det är användbart när en funktion kan returnera 0 som ett korrekt vid framgång och false vid trubbel, såsom strpos(). Den returnerar 0 om man hittar nålen på position 0 i höstacken. Om man kör if(strpos("hejsan", "hej")) så evaluerar det till false, men om man kör if(strpos("hejsan", "hej") !=== false) så evaluerar det true.