Veelgestelde vragen
Een database is een gestructureerde collectie van data. Het kan alles zijn van een simpele webwinkel lijst tot een plaatjes gallerij of alle informatie van een bedrijfsnetwerk. Om data toe te voegen en de opgeslagen data te bewerken heeft u een database management systeem zoals MySQL nodig.
Standaard is in het hostingpakket één MySQL-database opgenomen. Een extra MySQL-database kost 12 euro ex BTW per jaar extra. U kunt in MyVEVIDA zelf uw pakket uitbreiden met een extra database.
MySQL is een relationeel database management systeem. Een relationele database slaat de data op in aparte tables in plaats van in één lange waslijst. Een groot voordeel hiervan is snelheid en flexibiliteit. MySQL is één van de meest populaire open source databases vanwege de snelle performance, hoge betrouwbaarheid en een het eenvoud in gebruik. MySQL wordt wereldwijd gebruik in meer dan 6 miljoen installaties, variërend van grote corporaties tot gespecialiseerde embedded applicaties. SQL staat voor Structured Query Language, SQL is de standaard taal om databases te benaderen.
SQL statements worden gebruikt om bepaalde taken uit te voeren zoals het updaten van data in een database, of juist het ophalen van data uit een database. De standaard SQL commando's zoals "Select", "Insert", "Update", "Delete", "Create" en "Drop" kunnen worden gebruikt om datgene te bewerkstelligen wat iemand met een database wil.
Een voorbeeld query is:
SELECT * FROM table;
Hierbij wordt alle (*) data uit (FROM) table opgevraagd (SELECT).
MySQL database benadering vanuit PHP
Om contact te leggen naar een MySQL server heeft u de volgende vier gegevens nodig:
1. de hostnaam, veelal mysql.uwdomein.com;
2. de databasenaam;
3. de gebruikersnaam;
4. het wachtwoord;
De functie om de connectie op te bouwen is mysql-connect:
<?php
$link = mysql_connect('mysql.uwdomein.com', 'mysql_gebruikersnaam', 'mysql_wachtwoord');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>
Als er een connectie naar de database server tot stand is gebracht dient u de database selecteren die u wilt gebruiken. Daarvoor gebruikt u de mysql-select-db functie. Ook controleert u of het is gelukt om die database te selecteren:
<?php
$link = mysql_connect('mysql.uwdomein.com', 'mysql_gebruikersnaam', 'mysql_wachtwoord');
if (!$link) {
die('Not connected : ' . mysql_error());
}
// make foo the current db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
die ('Can't use foo : ' . mysql_error());
}
?>
Een tweede mogelijkheid is om van de PEAR class MDB2 gebruik te maken. Een voorbeeld connect en disconnect is:
<?php
require_once 'MDB2.php';
$dsn = 'mysql://gebruikersnaam:wachtwoord@hostnaam/databasenaam';
$options = array(
'debug' => 2,
'result_buffering' => false,
);
$mdb2 =& MDB2::factory($dsn, $options);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
// ...
$mdb2->disconnect();
?>
Uitgebreide documentatie kunt u vinden op PEAR::MDB2 documentatie website.
MySQL database benadering vanuit ASP
Om contact te leggen naar een MySQL-server via ASP heeft u de volgende vier gegevens nodig:
1. de hostnaam, veelal mysql.uwdomein.com;
2. de databasenaam;
3. de gebruikersnaam;
4. het wachtwoord;
U kunt het beste gebruik maken van de MySQL ODBC 5.1 Driver. De string om de connectie op te bouwen is (uitleg opties):
<%@ %>
<%
Option Explicit
Dim strConnection
Set strConnection = Server.CreateObject("ADODB.Connection")
strConnection.Open "Provider=MSDASQL;" & _
"Driver={MySQL ODBC 5.1 Driver};" & _
"Server=mysql.uwdomein.com;" & _
"Database=databasenaam;" & _
"UID=gebruikersnaam;" & _
"PWD=wachtwoord;"
If strConnection.errors.count = 0 Then
Response.write "Connected OK"
End If
strConnection.Close
Set strConnection = nothing
%>
Doormiddel van de Provider=MSDASQL wordt de Microsoft OLE DB voor ODBC aangesproken:
The Microsoft OLE DB Provider for ODBC (MSDASQL) is a technology that allows applications that are built on OLEDB and ADO (which uses OLEDB internally) to access data sources through an ODBC driver. MSDASQL is an OLEDB provider that connects to ODBC, instead of a database.
MySQL database benadering vanuit ASP.NET
Connector/NET
Sinds 11 februari 2010 is het gebruik van de native MySQL Connector/NET mogelijk voor het maken van een verbinding met een MySQL-database. Hiervoor is een aangepaste, en beperkte, System.Net.SocketPermission-configuratie ingesteld.
Informatie over deze connector vindt u op de onderstaande url:
http://dev.mysql.com/doc/refman/5.0/en/connector-net.html.
Een VB.NET voorbeeld:
<%@ Page debug="true" %>
<%@ Import Namespace = "System.Data" %>
<%@ Import Namespace = "MySql.Data.MySqlClient" %>
<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
Dim myConnection As MySqlConnection
Dim myDataAdapter As MySqlDataAdapter
Dim myDataSet As DataSet
Dim strSQL As String
Dim iRecordCount As Integer
' pooling=true of false is hieronder mogelijk
myConnection = New MySqlConnection("server=mysql_hostnaam;" & _
"user id=mysql_gebruikersnaam;" & _
"password=mysql_wachtwoord;" & _
"database=mysql_databasenaam;")
strSQL = "SHOW TABLES;"
myDataAdapter = New MySqlDataAdapter(strSQL, myConnection)
myDataSet = New Dataset()
myDataAdapter.Fill(myDataSet, "mytable")
MySQLDataGrid.DataSource = myDataSet
MySQLDataGrid.DataBind()
End Sub
</script>
<html>
<head>
<title>Simple MySQL Database Query</title>
</head>
<body>
<form runat="server">
<asp:DataGrid id="MySQLDataGrid" runat="server" />
</form>
</body>
</html>
De MySQL Connector/NET is niet serverbreed geïnstalleerd op onze webservers, zoals de MySQL Connector/ODBC wel is. De MySql.Data.dll assembly kan in de ~/bin directory van de desbetreffende applicatie geplaatst worden.
Entity Framework bovenop MySQL Connector/NET
(voor de wat gevorderde ontwikkelaars)
Maakt u een Entity Framework bovenop MySQL Connector/NET, de volgende -extra- informatie:
De correcte connectiestring in je web.confog of app.config dient het stuk na provider connection string tussen ' en ' te hebben ipv de door VS2008 & MySQL Connector/Net gegenereerde " en ". Deze werken namelijk wel op je development omgeving, maar niet op een webserver bij VEVIDA.
Goede connectie string:
<add name="modelEntities" connectionString="metadata=res://*/Model.csdl| res://*/Model.ssdl|res://*/Model.msl;provider=MySql.Data.MySqlClient; provider connection string='server=mysql.server.ext;User Id=mysqluser; Persist Security Info=True;database=mysqldb;password=mysqlpwd'" providerName="System.Data.EntityClient" />
Automatisch (verkeerde) gegenereerde connectie string:
<add connectionString="metadata=res://*/Model.csdl| res://*/Model.ssdl|res://*/Model.msl;provider=MySql.Data.MySqlClient; provider connection string="server=mysql.server.ext;User; Persist Security Info=True;database=mysqldb;password=mysqlpwd"" providerName="System.Data.EntityClient" />
Ook is het handig om in je web.config een DBFactory op te nemen zodat je zeker bent dat de appicatie de MySQL.Data.dll aanspreekt in je ~/bin directory.
<system.data>
<DbProviderFactories>
<clear />
<add invariant="MySql.Data.MySqlClient"
description=".Net Framework Data Provider for MySQL"
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data,
Version=6.2.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
Connector/ODBC
Met de MySQL Connector/ODBC kunt u een verbinding maken met een MySQL database vanuit .NET. Informatie over deze connector vindt u op de onderstaande url:
http://dev.mysql.com/doc/refman/5.0/en/connector-odbc.html.
Het C#-voorbeeld voor .NET op de bovengenoemde pagina is hieronder omgezet naar ASP.NET. Het originele voorbeeld vindt u op de onderstaande url.
http://dev.mysql.com/doc/refman/5.0/en/odbc-net-op-c-sharp-cp.html.
<%@ Page Trace="False" Debug="False" EnableViewState="False" %>
<%@ import Namespace="System.Data.Odbc" %>
<script runat="server">
private void Page_Load(object sender, System.EventArgs e) {
try {
// Connection string for MyODBC 5.1
string MyConString = "DRIVER={MySQL ODBC 5.1 Driver};" +
"Provider=MSDASQL;" +
"SERVER=mysql.hostnaam.nl;" +
"DATABASE=databasenaam;" +
"UID=inlognaam;" +
"PASSWORD=wachtwoord;" +
"OPTION=3";
// Connect to MySQL using MyODBC
OdbcConnection MyConnection = new OdbcConnection(MyConString);
MyConnection.Open();
Response.Write("<br /> !!! success, connected successfully !!!<br />");
// Display connection information
Response.Write("Connection Information:<br />");
Response.Write("Connection String:" + MyConnection.ConnectionString + "<br />");
Response.Write("Connection Timeout:" + MyConnection.ConnectionTimeout + "<br />");
Response.Write("Database:" + MyConnection.Database + "<br />");
Response.Write("DataSource:" + MyConnection.DataSource + "<br />");
Response.Write("Driver:" + MyConnection.Driver + "<br />");
Response.Write("ServerVersion:" + MyConnection.ServerVersion + "<br />");
// Close all resources
MyConnection.Close();
} catch (OdbcException MyOdbcException) { //Catch any ODBC exception ..
for (int i=0; i < MyOdbcException.Errors.Count; i++) {
Response.Write("ERROR #" + i + "<br />" +
"Message: " + MyOdbcException.Errors[i].Message + "<br />" +
"Native: " + MyOdbcException.Errors[i].NativeError.ToString() + "<br />" +
"Source: " + MyOdbcException.Errors[i].Source + "<br />" +
"SQL: " + MyOdbcException.Errors[i].SQLState + "<br />");
}
}
}
</script>
MySQL database benadering vanuit Perl
Om contact te leggen naar een MySQL server middels Perl heeft u de volgende vier gegevens nodig:
1. de hostnaam, veelal mysql.uwdomein.com;
2. de databasenaam;
3. de gebruikersnaam;
4. het wachtwoord;
U kunt gebruik maken van DBD:mysql om de verbinding op te bouwen.
De string om de connectie op te bouwen is:
#!C:/Perl/bin/perl
use strict;
use CGI qw/:standard/;
use DBI;
my ($dbh, $sth, $count);
$dbh = DBI->connect ("DBI:mysql:host=mysql.uwdomein.com;database=databasenaam",
"gebruikersnaam", "wachtwoord", {PrintError => 0, RaiseError => 1});
my $query = "SHOW TABLES";
$sth = $dbh->prepare ("$query");
$sth->execute ();
print header;
$count = 0;
while (my @val = $sth->fetchrow_array ()) {
++$count;
}
print p ("$count rows total");
$sth->finish ();
$dbh->disconnect ();
MySQL database onderhouden
De database kunt u onderhouden middels phpMyAdmin. Na het downloaden van phpMyAdmin kunt u deze uploaden naar uw website (bijvoorbeeld in http://www.uwdomein.com/phpmyadmin/), waarna u de juiste gegevens dient te wijzigen in het bestandje config.inc.php.
Aan te raden is de directory welke u gebruikt voor phpMyAdmin te beveiligen d.m.v. de rechten voor de IUSR te verwijderen, u kunt dan met uw FTP-inloggegevens inloggen op phpMyAdmin folder en tables aanmaken.
Ook kunt u gebruik maken van mySQL-Front (mocht deze download niet werken dan kunt deze altijd downloaden bij http://www.mysqlfront.de/), dit is een programma die u op uw lokale PC kunt installeren. Na installatie kunt u uw inloggegevens invoeren en verbinding maken met de server.
MySQL CC en MySQL Administrator zijn client programma's ontwikkelt door de makers van MySQL.
Een backup van uw database, of het overzetten van databases, kunt u doen middels mySQLdump of mySQL-Front (de import/export functie).
mySQLdump is een utility om een dump van een database te maken voor backup doeleinden, of voor het verzenden van data naar een andere SQL server (dit hoeft niet persee een mySQL server te zijn). De dump bevat SQL statements om de tables aan te maken en, indien nodig, te vullen. Beschikt u over de MySQLclient-tools (Windows of Linux) dan kunt u het volgende commando gebruiken om een dump (backup) van uw MySQL database te maken (plaats het commando op één regel):
mysqldump --opt -h mysql.uwdomein.com -u database_usernaam -p --databases databasenaam >> databasenaam.sql
De -p zorgt er voor dat pas na het drukken op [ENTER] een wachtwoord ingevoerd moet worden.
Op deze manier heeft u altijd een backup van uw database op uw lokale computer.
MySQL database optimalisatie
Optimalisatie is een gecompliceerd onderdeel van databasegebruik en -beheer, omdat u kennis dient te hebben van het gehele systeem. U kunt namelijk de snelheid van uw database aanzienlijk verbeteren door bijvoorbeeld gebruik te maken van table indexes.
Op http://dev.mysql.com/doc/refman/5.0/en/optimization.html kunt u hier meer over lezen, met name de hoofdstukken:
- 7.1 Optimization Overview
- 7.2 Optimizing SELECT Statements and Other Queries
- 7.3 Locking Issues
- 7.4 Optimizing Database Structure
En
Het is belangrijk om regelmatig een OPTIMIZE TABLE-query uit te voeren op alle tabellen van een database. Het verwijdert o.a. zogenaamde "overhead" -space/ruimte: ruimte die beschikbaar is gekomen nadat records verwijderd zijn, maar nog steeds voor de database ingebruik is. De data in de tabellen raken gefragmenteerd (verspreid).
Met onderstaand PHP script is het mogelijk om alle tabellen in een MySQL database te optimaliseren. Het PHP script kunt u op uw website plaatsen (geef het bijvoorbeeld de naam db_optimize.php) en via uw website, online, opvragen.
<?php
/**
* (c)2005 - 2009 VEVIDA Services BV
*
* 20090701.1100 - Jan Reilink <info at vevida.com>
* Script om alle tabellen in een MySQL database te optimaliseren.
*/
// MySQL configuratie
$dbhostnaam = 'mysql.example.com';
$dbusername = 'mysql_gebruikersnaam';
$dbpassword = 'mysql_wachtwoord';
$db = 'mysql_databasenaam';
// Maak verbinding met de MySQL server
$link = mysql_connect($dbhostnaam, $dbusername, $dbpassword);
if (!$link) {
die('Could not connect: ' . mysql_error());
}
// Selecteer de database, of geef een foutmelding
$db_selected = mysql_select_db($db, $link);
if (!$db_selected) {
die ('Can't use '.$db. ' : ' .mysql_error());
}
// Maak een query
$listquery = "SHOW TABLES FROM `".$db."`";
$dbtables = mysql_query($listquery);
/**
* Vraag alle tabellen uit de database op en plaats deze in een array.
* Een tellertje op het aantal geoptimaliseerde tabellen is ook
* altijd leuk :-)
*/
$t = 1;
while ($row = mysql_fetch_array($dbtables, MYSQL_NUM)) {
$optimizequery = "OPTIMIZE TABLE `".$row[0]."`";
$result = mysql_query($optimizequery);
/**
* Geef een melding dat de betreffende tabel geoptimaliseerd is,
* of "exit" met een foutmelding, als er iets fout gegaan is.
*/
if (!$result) {
exit(mysql_error());
} else {
print 'OK, table '.$row[0].' geoptimaliseerd.<br />';
$t = $t + 1;
}
echo '<br />Klaar! In totaal '.$t.' tabellen geoptimaliseerd.';
?>
MySQL database grootte
Met onderstaand PHP script is het mogelijk om op te vragen hoe groot een MySQL database is. Het PHP script kunt u op uw website plaatsen (geef het bijvoorbeeld de naam db_size.php) en via uw website, online, opvragen.
<?php
/**
* Script om op te vragen hoe groot een MySQL database is
* Invoer: $dbhostnaam, $db, $dbusername, $dbpassword
*
* v20090330.1630
* Copyright 2004 - 2009 VEVIDA Services B.V. - Jan Reilink <info at vevida.com>
*
*/
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>MySQL database grootte (PHP)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="VEVIDA Services BV" />
</head>
<body>
<p style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">
<?php
$dbhostnaam = "mysql.uwdomein.com";
$db = "mysql_databasenaam";
$dbusername = "mysql_gebruikersnaam";
$dbpassword = "mysql_wachtwoord";
mysql_connect($dbhostnaam,$dbusername,$dbpassword);
mysql_select_db($db) or die ("Fout, kan de database niet openen");
function get_dbsize($db) {
$query = "SHOW TABLE STATUS FROM `".$db."`";
if ($result = mysql_query($query)) {
$tables = 0;
$rows = 0;
$size = 0;
while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
$rows += $row["Rows"];
$size += $row["Data_length"];
$size += $row["Index_length"];
$tables++;
}
}
$data[0] = $size;
$data[1] = $tables;
$data[2] = $rows;
return $data;
}
$result = get_dbsize($db);
print "Database <b>" .$db . "</b> heeft de volgende gegevens:<br /><br />";
$megabytes = $result[0] / 1024 / 1024;
$megabytes = round($megabytes, 3);
print "<span style="font-variant: normal;">";
print_r( $result[0] . "t" . " bytes, " . "in MegaBytes maakt dit, " . $megabytes . " MBrn");
print "<br />";
print_r( $result[1] . "tt" ." tablesrn");
print "<br />";
print_r( $result[2] . "tt" ." rowsrn");
print "</span>";
?>
</p>
<p style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">
Controle gedaan op:
<?php
/**
* geeft de datum weer in het formaat: Fri, 03 Feb 2006 11:02:09 +0100
*/
echo date("r");
?>
<br /><br />
<span style="font-size: 10px; padding-left: 3px;">
© 2004 - 2009 <a href="http://www.vevida.com" target="_blank">VEVIDA Services BV</a>.
</span>
</p>
</body>
</html>
LOAD DATA LOCAL INFILE
Met de MySQL LOAD DATA LOCAL INFILE-functie is het mogelijk om lokale bestanden met data, op het bestandssysteem van de webserver, met één statement aan de database toe te voegen. Met deze functie kunt u in één keer een bulk data, bijvoorbeeld uit een .csv-bestand, aan de database toevoegen.
Een voorbeeldscript:
<?php
/**
* (c)2005 - 2009 VEVIDA Services BV
* 20090720.1000 - Jan Reilink <info at vevida.com>
*
* LOAD DATA LOCAL INFILE voorbeeld.
*/
$link = mysql_connect('mysql.[domein].org', '[gebruikersnaam]', '[wachtwoord]');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully <br/>';
// maak '[dbnaam]' de geselecteerde db
$db_selected = mysql_select_db('[dbnaam]', $link);
if (!$db_selected) {
die('Can't use foo : ' . mysql_error() .'<br/>');
}
/**
* let op het aantal backslashes ('').
* de specifieke query is afhankellijk van het .csv bestand.
*/
$datafile = 'd:www[FTP-inlognaam].orgwwwdata_bestand.csv';
$query = "LOAD DATA LOCAL INFILE '{$datafile}' INTO TABLE `tabelnaam`
FIELDS TERMINATED BY ';' LINES TERMINATED BY 'rn' (rij1, rij2, rij3, rij4, rij5)";
$result = mysql_query($query, $link);
if (!$result) {
die('Query is mislukt: ' . mysql_error() .'<br/>' .$query);
} else {
echo 'query succeeded succesfully.';
}
mysql_close($link);
?>
Let op dat u deze functie niet via de phpMyAdmin applicatie kunt gebruiken.
phpMyAdmin
phpMyAdmin is a tool written in PHP intended to handle the administration of MySQL over the Web.
In MyVEVIDA is een voorgeïnstalleerde phpMyAdmin beschikbaar, voor klanten die beschikken over een MySQL database. U vindt deze phpMyAdmin door in te loggen op MyVEVIDA. Beschikt u over een MySQL database, dan is hier een kopje "Uw mySQL server" opgenomen.
Hierdoor hoeft u niet zelf meer een phpMyAdmin op uw website te plaatsen, alhoewel u natuurlijk vrij bent om dit te wél te doen.
Gaat u naar de phpMyAdmin pagina, dan moet u uw MySQL gebruikernaam en wachtwoord invoeren en de betreffende MySQL server selecteren uit het drop-down menu. Uw database wordt automatisch geselecteerd. De verbinding maakt gebruik van een beveiligde SSL (HTTPS) verbinding, de login geschiedt via een cookie. Uw browser dient dit te ondersteunen.
Externe hulp
Mocht u hulp nodig hebben met PHP en mySQL dan is er een uitstekende (Nederlandstalige) handleiding beschikbaar op
http://nl.linux.org/doc/HOWTO/PHP-MySQL-NL.html
MySQL 5.0 Reference Manual






















