Gå til innhold

Database prefix i php


Anbefalte innlegg

Jeg har sett i mange php programmer at de bruker en slags databaseprefix i filene sine. Sånn har jeg også lyst til å gjøre :D

 

Altså sånn at man har en config hvor selve prefixen står. I alle de andre filene hvor du skal hente informasjon eller redigere informasjon fra databasen, er configfila inkludert og du har angitt at den skal ta med prefixen.

 

Eks: sql-spørring: select from [prefix] & tabell ORDER BY id

 

Er det noen som har noen gode eksempler på hvordan dette gjøres?

Lenke til kommentar
Videoannonse
Annonse

Det er vel ikke noe hokus-pokus.

 

PHP

<?php

 

/* config.php */

$config = array(

'prefix' => 'prefix_';

);

 

/* select.php */

 

include_once('config.php');

 

// no.php.net/extract

extract($config);

 

mysql_query("SELECT * FROM {$prefix}tabell ORDER BY id DESC");

?>

Endret av hans3k
Lenke til kommentar

Er vel egentlig ikke noe hokus pokus.

Viss du bare kjører spørringene dine direkte så er vel den simpleste måten bare å definere TABLE_*-konstanter for tabellene i databasen din ala noe sånt:

define('TABLEPREFIX', 'myproject_');
define('TABLE_NEWS', TABLEPREFIX . 'news');
define('TABLE_USERS', TABLEPREFIX . 'users');
// osv osv

// eksempel på spørring
$result = $db->query('SELECT * FROM ' . TABLE_NEWS);

En mer OOP-vennlig måte ville nok vært å droppe konstantene til fordel for en klasse som kan håndtere tabellnavnene.

Lenke til kommentar
Er vel egentlig ikke noe hokus pokus.

Viss du bare kjører spørringene dine direkte så er vel den simpleste måten bare å definere TABLE_*-konstanter for tabellene i databasen din ala noe sånt:

define('TABLEPREFIX', 'myproject_');
define('TABLE_NEWS', TABLEPREFIX . 'news');
define('TABLE_USERS', TABLEPREFIX . 'users');
// osv osv

// eksempel på spørring
$result = $db->query('SELECT * FROM ' . TABLE_NEWS);

En mer OOP-vennlig måte ville nok vært å droppe konstantene til fordel for en klasse som kan håndtere tabellnavnene.

8657837[/snapback]

Høres veldig bra ut alt sammen! Jeg har prøvd dem, men får dem ikke til å virke. Kan noen lage et fulstendig eksempel til meg, så det er lettere å se hva jeg skal gjøre?

 

Tusen takk for all hjelp!

Lenke til kommentar
Jeg har sett i mange php programmer at de bruker en slags databaseprefix i filene sine. Sånn har jeg også lyst til å gjøre :D

8657694[/snapback]

 

Du trenger det ikke. Vent med det , til du vet hvorfor man trenger det :)

8663756[/snapback]

Jeg vil bruke prefix, for jeg har laget et enkelt publiseringssystem. Hvis noen andre i familien vil bruke det systemet, blir veldig tungvint å endre all tabellinfoen i systemet. Derfor tenkte jeg å bruke prefix :)

 

 

Denne koden vil jeg bruke prefix på. Veldig glad om noen lager config-fila også! :innocent: Select.php:

Klikk for å se/fjerne innholdet nedenfor
<?php

 

// Connects to your Database

 

mysql_connect("localhost", "", "") or die(mysql_error());

mysql_select_db("") or die(mysql_error());

 

$result = mysql_query("SELECT * FROM cms1 WHERE length(under)=0 ORDER BY sortering ASC, id");

 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

 

printf("<a href='meny.php?type=%s'>%s</a>", $row["type"], $row["type"]);

 

}

 

?></

Endret av mariusmk
Lenke til kommentar

Det er ikke vits i.. og du trenger det ikke. Har du mer enn 10 tabeller?

 

hvis ja;

 

$prefix = 'mitt_cms';

 

$result = mysql_query("SELECT * FROM $prefix_cms1 WHERE length(under)=0 ORDER BY sortering ASC, id");

 

Men hvis du ikke vet hvordan du setter inn en variabel i en string, sa tror jeg egentlig ikke heller pa at du har laget et cms...... det kan jeg heller ikke se pa koden din. OK, men ikke som om du har kodet et helt CMS. (CMS er mye mer enn 'legg til nyhet', 'slett nyhet' og 'endre nyhet'. Det er veldig fint a begynne pa den maten, men du trenger ikke prefix pa tabellene)

 

:)

Lenke til kommentar

Det funker dårlig, for _ er tillatt i variabelnavn :]

Du må ha "SELECT * FROM {$prefix}_cms1", "SELECT * FROM ".$prefix."_cms1" eller noe i den dur.

 

Men poenget er bare at du må ha en variabel med prefixet, som du skriver før tabellnavnet alle steder. Evt definerer en konstant for hvert tabellnavn slik noen over foreslo.

 

Dette er jo litt tungvindt, så det er ikke noe poeng å gjøre det bare fordi noen andre gjør det.. Grunnen til at diverse forum-software og CMS-er har det, er at de skal settes opp rundt om kring hos ørten forskjellige folk, og da er det en risiko for at databasen allerede inneholder en tabell som heter users eller forum_users eller noe slikt hos noen. Og kanskje man ønsker å kjøre flere forum på samme database, og da må man kunne kalle den ene forum1_users og den andre forum2_users osv.

 

Siden du spør om noe som egentlig er såppas enkelt, så tviler jeg på at du lager den neste Joomla i denne omgang, så hadde jeg vært deg hadde jeg droppa det for enkelhetens skyld :]

Lenke til kommentar
Det er ikke vits i.. og du trenger det ikke. Har du mer enn 10 tabeller?

 

hvis ja;

 

$prefix = 'mitt_cms';

 

$result = mysql_query("SELECT * FROM $prefix_cms1 WHERE length(under)=0 ORDER BY sortering ASC, id");

 

Men hvis du ikke vet hvordan du setter inn en variabel i en string, sa tror jeg egentlig ikke heller pa at du har laget et cms...... det kan jeg heller ikke se pa koden din. OK, men ikke som om du har kodet et helt CMS. (CMS er mye mer enn 'legg til nyhet', 'slett nyhet' og 'endre nyhet'. Det er veldig fint a begynne pa den maten, men du trenger ikke prefix pa tabellene)

 

:)

8667136[/snapback]

Det virker som dere missforstår litt. Jeg har brukt betegnelsen "enkel" hver gang jeg snakker om publiseringsløsningen min. Saken er at andre i familien vil bruke det "enkle" publiseringssystemet. Jeg ønsker å benytte samme database og dermed forskjellige tabeller. Det som da er saken er at for hver gang et nytt familiemedlem vil lage sin nettside med cms'en, så må jeg endre alle admin-filene hvor jeg redigerer artikler, sidekolofoner, brukere, kategoriinnhold. Det er over 20 adminfiler og dermed blir det kjedelig å endre all tabellinfoen til dem.

 

Jeg har bare vist dere de stedene av publiseringssystemet hvor jeg har hatt problemer. Det er ikke bare endring av nyheter i systemet.

Lenke til kommentar
Det vil si at du har lagd et eget "CMS", men aner ikke hvordan man putter variabler/konstanter sammen med normalt tekst?

 

Noe som ikke stemmer her.

8670971[/snapback]

Når man spør på forum om hjelp til en ting, burde det vell ikke være sånn at man må forklare seg hele tiden :nei: Jeg spurte konkret om hjelp til å sette inn en prefix. Jeg kan ikke så mye og jeg har sagt utallige ganger at det er et enkelt system.
Lenke til kommentar
Ja, jeg er enig med deg M4rTin. Dette burde tradstarter klare selv.

Og ihvertfall siden han fikk svaret i post #3.

 

Hvorfor forsetter du a sporre det samme sporsmalet?

8672567[/snapback]

Enig at jeg burde klare det selv, men jeg prøvde så best jeg kunne, men det virket ikke :(
Lenke til kommentar
Har du laget en tabell med prefix-navnet? De kommer ikke automatisk hvis det var det du regnet med.

Har du satt samme prefix som du har pa tabellen?

Prov a echo tabellnavnet, se hva du far.

 

Evt post #2 gar ogsa. Den er grei og enkel.

8672921[/snapback]

Nå har jeg endelig klart det. Jeg takker for all hjelp. Det ble post nr. 3 :) Jeg må ha gjort et eller annet feil forrige gang :hmm:

 

Edit: Jeg tror kanskje det var at jeg ikke hadde regnet med at det skulle være _ etter prefix.

Endret av mariusmk
Lenke til kommentar
  • 2 uker senere...

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å
×
×
  • Opprett ny...