database
- Kan ik via code de charset van een (lege) database instellen op UTF8?
- Kan ik via code kijken of een tabel bestaat, en zoniet deze laten genereren?
http://dev.mysql.com/doc/refman/5.0/en/create-database.html
En tabellen: http://dev.mysql.com/doc/refman/5.0/en/create-table.html
Voorbeeldje:
En voor een tabel:
Zie ook: http://phptuts.nl/view/41/2/
Allebei de antwoorden zijn ja. Zie ook de syntax voor het aanmaken van databases: En tabellen: http://dev.mysql.com/doc/refman/5.0/en/create-table.html
Voorbeeldje:
En voor een tabel:
Code (php)
1
2
3
4
5
2
3
4
5
CREATE TABLE IF NOT EXISTS deTableName (
id int NOT NULL auto_increment,
name varchar(50) NOT NULL,
PRIMAIR KEY (id)
)
id int NOT NULL auto_increment,
name varchar(50) NOT NULL,
PRIMAIR KEY (id)
)
Zie ook: http://phptuts.nl/view/41/2/
Gewijzigd op 30/01/2012 16:18:43 door Wouter J
Even dan toch nog een vraagje...
Ik schrijf nu in de "manual" van mijn CMS dat men een database moet aanmaken met charset utf8. Maar als ik het dus goed begrijp is dit helemaal niet nodig en kan ik de database volledig vanuit de code zelf aanmaken? Maar waar moet ik dan het wachtwoord en de gebruikersnaam opgeven? En werkt dit ook op een shared host?
Wat je doet is het volgende:
Je maakt connectie met de MySQL server met mysql_connect. Vervolgens gebruik je niet mysql_select_db. Je voert eerst de query zoals hij hierboven staat uit.
Vervolgens selecteer je de DB door met mysql_select_db en dan voer je de CREATE TABLE queries uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
$sql = mysql_connect('localhost', 'user', 'pass');
if( $sql === false )
echo '[ERROR] We could not connect: '.mysql_error();
else
{
$cQuery = "CREATE DATABASE IF NOT EXISTS ozzieCMS CHARACTER SET utf8;";
$createDb = mysql_query($cQuery, $sql);
if( $createDb === false )
echo '[ERROR] We could not make DataBase: '.mysql_error();
else
{
$cQuery = "
CREATE TABLE IF NOT EXISTS users(
id int NOT NULL auto_increment,
name varchar(50) NOT NULL,
pass varchar(50) NOT NULL,
PRIMAIR KEY (id)
);
CREATE TABLE IF NOT EXISTS pages(
id int NOT NULL auto_increment,
name varchar(50) NOT NULL,
content longtext NOT NULL,
PRIMAIR KEY (id)
);
";
$createTables = mysql_query($cQuery, $sql);
if( $createTables === false )
echo '[ERROR] We could not make tables: '.mysql_error();
}
}
?>
$sql = mysql_connect('localhost', 'user', 'pass');
if( $sql === false )
echo '[ERROR] We could not connect: '.mysql_error();
else
{
$cQuery = "CREATE DATABASE IF NOT EXISTS ozzieCMS CHARACTER SET utf8;";
$createDb = mysql_query($cQuery, $sql);
if( $createDb === false )
echo '[ERROR] We could not make DataBase: '.mysql_error();
else
{
$cQuery = "
CREATE TABLE IF NOT EXISTS users(
id int NOT NULL auto_increment,
name varchar(50) NOT NULL,
pass varchar(50) NOT NULL,
PRIMAIR KEY (id)
);
CREATE TABLE IF NOT EXISTS pages(
id int NOT NULL auto_increment,
name varchar(50) NOT NULL,
content longtext NOT NULL,
PRIMAIR KEY (id)
);
";
$createTables = mysql_query($cQuery, $sql);
if( $createTables === false )
echo '[ERROR] We could not make tables: '.mysql_error();
}
}
?>
Nog even wat onduidelijkheid over die user en die pass. Waar komen die nou precies vandaan?
Stel je dus voor... iemand gaat mijn CMS gebruiken en er moet dus een database worden aangemaakt. Kan ik dan een invoerveld tonen waar men een gebruikersnaam en wachtwoord in moet vullen? En dat ik die dan in de $sql verwerk? Of moet ik eerst via phpMyAdmin al een gebruikersnaam / wachtwoord instellen? En hoe koppel ik dan een user aan een database? Sorry... ik ben het eventjes helemaal kwijt...
Vervolgens kun je bij Stap 3 de gebruiker basis informatie, als sitenaam korte omschrijving enz., laten invullen. Deze sla je dan op in de database.
PS: Heb je ooit ook een andere CMS systeem gebruikt? Zo niet dan raad ik je aan dat eerst te doen, iets als Drupal of WordPress. Want dan zie je meteen hoe die zulke dingen oplossen.
Gewijzigd op 30/01/2012 16:52:08 door Wouter J
Maar even om terug te komen op mijn vraag... bij een shared host dan heb je toch al een gebr. naam en wachtwoord? En op je eigen server mag je die dan zelf "verzinnen" of moet je die eerst ergens instellen?
"Bij stap 1 laat je ze de MySQL gegevens (host, user en pass) invullen."
Dus zijn deze user en pass al bekend, of moeten ze die hier aanmaken?
Als je een nieuwe domeinnaam aan een host koppelt krijg je automatisch de MySQL gegevens. Deze weet iedereen die een host heeft dus. Dus ja, deze gebruikers zijn al bekent. Die kun je niet zomaar even aanmaken, zou wel makkelijk zijn. Dan kun je zo'n beetje bij elke website in de database...
Ik log dan met mijn gegevens in op cPanel (ken je dat?). Hier kan ik dan een nieuwe database aanmaken (ik hoef geen geberuikersnaam en wachtwoord op te geven). Vervolgens maak ik een "user" aan en die moet ik wel een gebruikersnaam en wachtwoord geven. Vervolgens koppel ik deze "user" aan de database die ik zojuist heb gemaakt. De vraag is nu dus hoe dit dan werkt in combinatie met jouw code. Het lijkt erop dat ik vanuit cPanel een database en een user moet aanmaken en dat dit dan dus niet geautomatiseerd kan. Of zit ik ernaast?
Toevoeging op 30/01/2012 20:16:30:
Nee je zit er niet naast, PHP kan geen databases aanmaken. Daar heeft het de rechten niet voor. Je kunt wel de queries uitlezen die je ook gebruikt om een database te maken, maar als je die in PHP zou uitvoeren zou je een error terug krijgen. Het is gebruikelijk bij een CMS dat de gebruiker zelf de host, gebruiker, wachtwoord en database aanlevert. Dit is vaak weinig werk en vergt weinig inspanning. Van daar uit kun je als CMS de tabellen toe gaan voegen die het nodig heeft.
Dankjewel voor je toelichting!
Dus dit stukje uit de code van Wouter gaat dan niet werken?
CREATE DATABASE IF NOT EXISTS deDBname CHARACTER SET utf8
Kan ik wel (na het aanmaken van een database) de character set via php code aanpassen? Of moet ik dat ook handmatig doen?
Wat je wel kunt doen is kijken of een database een bepaalde charset hanteert. Het enige nadeel is dat je met charsets vrij weinig kunt als het eenmaal ingesteld is. Heeft ook te maken met de "engines" ofwel algoritmes te maken. Defacto standaard is de myISAM, hier zul je de charset wel kunnen wijzigen maar of dat met de rest ook kan.. Dat durf ik niet te zeggen. Daarnaast doet het er niet toe wat de default is voor de database zelf, zolang de tabellen maar UTF8 hanteren en daar heb jij gelukkig zelf controlle over :)
Merijn Venema op 30/01/2012 20:16:29:
Nee je zit er niet naast, PHP kan geen databases aanmaken. Daar heeft het de rechten niet voor.
Als je de juiste gebruikersnaam en password meegeeft die wel de juiste rechten heeft kan het wel. Ik doe het zelf ook zo.
PHP heeft er een (deprecated) functie voor: mysql_create_db alleen daarin geeft PHP ook aan dat je dit moet doen met een CREATE DATABASE query. Dus volgens mij is het de manier zoals het hoort?
In het geval dat het WEL kan, kan het dan in alle gevallen, dus ook op shared hosts???
Dat ligt er maar net aan welke gebruikergegevens je hebt. Heeft die gebruiker CREATE rechten dan kan het gewoon.
Het kan zoals Wouter al zegt en bijvoorbeeld wanneer je de juiste rechten hebt. Kan je (via php) op MySQL inloggen met root en bijbehorend password dan lukt het wel. Het zal dus een rechten kwestie zijn. Het is geen php kwestie, immers php komt met een bepaalde user binnen en het maakt MySQL niet uit of je met php of commandline of weetikveel tooling inlogt.
Op mijn werk echter heb ik geen toegang tot cPanel (of iets dergelijks) en kan ik alleen inloggen in PhpMyAdmin. Ik kan hier (volgens mij) wel een database aanmaken, maar in PhpMyAdmin is er geen sprake van users (toch)??? Of wel?
Ik weet nu dus niet exact hoe ik dit moet aanpakken voor mijn CMS. Moet ik de gebruiker nu zelf een database aan laten maken, of moet ik dit door het CMS laten doen. En zo ja, werkt dit dan wel in alle gevallen?
In ieder geval moet je dan wel volle rechten hebben inderdaad, dat heb je op een shared hosting nimmer. Vaak ben je ook gelimiteerd aan x aantal databases dus levert dat ook problemen op. Root access op shared hosting ? Ik ken er geen enkele. Sorry voor de verwarring, het is mogelijk in PHP echter niet raadzaam voor een CMS die je makkelijk en snel wilt kunnen uitrollen.
Laten we even bij het echte begin beginnen: De MySQL server. Deze server bevat alle databases met tabellen erin en de MySQL users.
Om een overzicht te krijgen van wat er nou op deze server staat hebben een aantal developers PhpMyAdmin geschreven. Dit is eigenlijk gewoon een website die heel veel queries uitvoert waarmee hij de hele SQL server uitleest. PhpMyAdmin heeft ook een gebruikersnaam + wachtwoord nodig die je instelt in de config file van PhpMyAdmin. Je merkt er dus niks van, maar ook PhpMyAdmin logt in.
Je hebt om toegang te hebben tot de SQL server altijd een gebruikersnaam + wachtwoord nodig, anders kom je er niet in.
Dank heren. Om dan nog even terug te komen bij mijn basisvraag. Is het dan toch niet het handigst om de gebruiker handmatig een database aan te laten maken? En dan deze gegevens in te voeren in het cms en dat het cms dan de tabellen aanmaakt?