Automatisch script export en import
Ik ben op zoek naar een geautomatiseerd script die dagelijks:
-in een sql database een getal opzoekt dat hoort bij een bepaald item nummer
-dit exporteert naar een andere sql database
-datum van vandaag toevoegt
Het doel is om een historie op te bouwen van het aantal hits per item
Voorbeeld:
SQL bron per 01-05-2011
'item' 1 'hits' 6
'item' 2 'hits' 9
'item' 3 'hits' 4
etc.
Na enkele dagen script
SQL nieuw
'item' 1 'datum' 01-05-2011 'hits' 6
'datum' 02-05-2011 'hits' 8
'datum' 03-05-2011 'hits' 11
'item' 2 'datum' 01-05-2011 'hits' 9
'datum' 02-05-2011 'hits' 11
'datum' 03-05-2011 'hits' 15
'item' 3 'datum' 01-05-2011 'hits' 4
'datum' 02-05-2011 'hits' 7
'datum' 03-05-2011 'hits' 10
Kan iemand mij op weg helpen?
Wat heb je zelf al?
Ik heb nog niets... Ik kan PHP scripts aanpassen (met veel trial and error) maar ik kan zelf geen script schrijven. Ik hoop daarom dat iemand mij op weg kan helpen of de juiste kant op kan sturen.
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
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
<?
//connectie met datbase maken en database selecteren
//hierna een begin
$sql = "SELECT * FROM tabel_naam WHERE item = $item";
$item = mysql_fetch_object(mysql_query(sql));
if($res) {
//query geslaagd, doe iets
}else{
//query mislukt...melding...
mysql_error();
}
//je hebt nu de hele database rij met corresponderend item gevangen in het object $item.
//connect met andere database
$datum = date("d-m-Y"); //datum van huidige dag:
$sql = "INSERT INTO item_hits (item,hits,datum) VALUES('$item->item','$item->hits','$datum')";
$res = mysql_query($sql);
if($res) {
//query geslaagd, doe iets
}else{
//query mislukt...melding...
mysql_error();
}
?>
//connectie met datbase maken en database selecteren
//hierna een begin
$sql = "SELECT * FROM tabel_naam WHERE item = $item";
$item = mysql_fetch_object(mysql_query(sql));
if($res) {
//query geslaagd, doe iets
}else{
//query mislukt...melding...
mysql_error();
}
//je hebt nu de hele database rij met corresponderend item gevangen in het object $item.
//connect met andere database
$datum = date("d-m-Y"); //datum van huidige dag:
$sql = "INSERT INTO item_hits (item,hits,datum) VALUES('$item->item','$item->hits','$datum')";
$res = mysql_query($sql);
if($res) {
//query geslaagd, doe iets
}else{
//query mislukt...melding...
mysql_error();
}
?>
Zet je script in een cronjob op je server. Deze kun je instellen op welke tijden/datums het script uitgevoerd moet worden, zodat het automatisch gaat...
Kunnen wat foutjes in zitten uiteraard. Maar deze kant op moet je denken.
Misschien zijn er mensen gewilligd je hier wat verder mee te helpen. Tot zover mijn bijdrage.
Wijziging:
zorg dat de tabel met datums bij de hits een 'id'-kolom krijgt en zet deze op auto_increment, zodat bij iedere query draai er automatisch een nieuwe nummer aan wordt gegeven.
Met wat google werk en beetje plaren moet je dit wel lukken. Zo zijn er velen begonnen denk ik zo. (me ;) )
Gewijzigd op 20/05/2011 10:25:53 door Dave L
lijn 4 geen * geef aan wat je wil gebruiken, variable escapen
lijn 19 gebruik je weer $sql lijkt me beter als je daar een aparte variable voor neemt.
lijn 18 mysql heeft eigen date functie
lijn 19 geen backticks in je query variablen weer escapen , sql injectie
Gerhard l op 20/05/2011 10:30:15:
@Dave je volgorde klopt maar je script lang niet.
Dat klopt. Meneer moet het zelf ook uitwerken. ga niet alles voorkauwen.
mysql_real_escape_string en variabelen niet op deze manier hergebruiken snapt hij nu dus ook via jouw opmerking.
Bedankt voor je toevoeging. Dit is ook niet mijn werkwijze, maar een 'snel-op-weg-help' iets. De bedoeling is duidelijk toch ? daar ging het mij om...
van de ene naar de andere database is op zich ook een extra complicatie tenzij dit dezelfde MySQL instantie is. In alle andere gevallen moet je ook toestemming en rechten hebben om over een netwerk of internet een andere MySQL te benaderen. Probeer eerst het script uit te werken voor dezelfde MySQL instantie.
John D, ik denk dat hij een andere tabel bedoeld binnen de database.
Alvast bedankt voor alle reacties. Zoals gezegd: ik ben blij met alle info. Het is overigens de bedoeling dat dit alles binnen dezelfde SQL instantie plaats vindt. Het moet gewoon een nieuwe database worden gevuld met enkele data van de bron-database.
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
# We gaan even een verbinding maken
$dbConnect["hostname"] = "localhost";
$dbConnect["username"] = "";
$dbConnect["password"] = "";
$dbConnect["database"] = "";
$dbLink = new mysqli($dbConnect["hostname"],$dbConnect["username"],$dbConnect["password"],$dbConnect["database"]);
# En als het niet klopt, dan gaan we gewoon lekker via de exit weg.
if(mysqli_connect_errno())
{
trigger_error('Fout bij verbinding: '.$mysqli->error);
}
else
{
# We gaan de query aanmaken met die onzin die daar bijhoort
$dbSql = "SELECT item,hits FROM tabel_naam WHERE item = '" . mysqli_real_escape_string($dbLink, $item) . "'";
$dbResult = $dbLink->query($dbSql);
$dbNumRows = $dbResult->num_rows;
# Even kijken of het gelukt is.
if ($dbNumRows == true)
{
# Dan gaan we nu de query maken voor die andere database.
$sql = "INSERT INTO item_hits (item,hits,datum) VALUES(
'" . mysqli_real_escape_string($dbLink, $dbRow->item) . "',
'" . mysqli_real_escape_string($dbLink, $dbRow->hits) . "',
DATENOW())";
$dbResult = $dbLink->query($dbSql);
$dbNumRows = $dbResult->num_rows;
if ($dbNumRows == true)
{
echo 'Yes! We kunnen gaan.';
}
else
{
echo 'Help! Het werkt niet. (2)';
}
}
else
{
echo 'Help! Het werkt niet. (1)';
}
}
?>
# We gaan even een verbinding maken
$dbConnect["hostname"] = "localhost";
$dbConnect["username"] = "";
$dbConnect["password"] = "";
$dbConnect["database"] = "";
$dbLink = new mysqli($dbConnect["hostname"],$dbConnect["username"],$dbConnect["password"],$dbConnect["database"]);
# En als het niet klopt, dan gaan we gewoon lekker via de exit weg.
if(mysqli_connect_errno())
{
trigger_error('Fout bij verbinding: '.$mysqli->error);
}
else
{
# We gaan de query aanmaken met die onzin die daar bijhoort
$dbSql = "SELECT item,hits FROM tabel_naam WHERE item = '" . mysqli_real_escape_string($dbLink, $item) . "'";
$dbResult = $dbLink->query($dbSql);
$dbNumRows = $dbResult->num_rows;
# Even kijken of het gelukt is.
if ($dbNumRows == true)
{
# Dan gaan we nu de query maken voor die andere database.
$sql = "INSERT INTO item_hits (item,hits,datum) VALUES(
'" . mysqli_real_escape_string($dbLink, $dbRow->item) . "',
'" . mysqli_real_escape_string($dbLink, $dbRow->hits) . "',
DATENOW())";
$dbResult = $dbLink->query($dbSql);
$dbNumRows = $dbResult->num_rows;
if ($dbNumRows == true)
{
echo 'Yes! We kunnen gaan.';
}
else
{
echo 'Help! Het werkt niet. (2)';
}
}
else
{
echo 'Help! Het werkt niet. (1)';
}
}
?>
Gewijzigd op 20/05/2011 13:30:21 door PHP Scripter
offtopic: kan een num_row true teruggeven?
is altijd een aantal gerhard.. number_of_rows?
if ($dbNumRows == true)
wel gaat werken..
Tenzij er geen rows zitten ;-)
O dus alleen als hij 0 rijen teruggeeft, zal hij een false geven.
Je hebt hem door! :)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
# We gaan even een verbinding maken
$dbConnect["hostname"] = "localhost";
$dbConnect["username"] = "root";
$dbConnect["password"] = "root";
$dbConnect["database"] = "mb";
$dbLink = new mysqli($dbConnect["hostname"],$dbConnect["username"],$dbConnect["password"],$dbConnect["database"]);
# En als het niet klopt, dan gaan we gewoon lekker via de exit weg.
if(mysqli_connect_errno())
{
trigger_error('Fout bij verbinding: '.$mysqli->error);
}
else
{
# We gaan de query aanmaken met die onzin die daar bijhoort
$dbSql = "SELECT unit_num,hits FROM jos_ezrealty WHERE item = '" . mysqli_real_escape_string($dbLink, $item) . "'";
$dbResult = $dbLink->query($dbSql);
$dbNumRows = $dbResult->num_rows;
# Even kijken of het gelukt is.
if ($dbNumRows == true)
{
# Dan gaan we nu de query maken voor die andere database.
$sql = "INSERT INTO statistieken (unit_num,hits,datum) VALUES(
'" . mysqli_real_escape_string($dbLink, $dbRow->item) . "',
'" . mysqli_real_escape_string($dbLink, $dbRow->hits) . "',
DATENOW())";
$dbResult = $dbLink->query($dbSql);
$dbNumRows = $dbResult->num_rows;
if ($dbNumRows == true)
{
echo 'Yes! We kunnen gaan.';
}
else
{
echo 'Help! Het werkt niet. (2)';
}
}
else
{
echo 'Help! Het werkt niet. (1)';
}
}
?>
# We gaan even een verbinding maken
$dbConnect["hostname"] = "localhost";
$dbConnect["username"] = "root";
$dbConnect["password"] = "root";
$dbConnect["database"] = "mb";
$dbLink = new mysqli($dbConnect["hostname"],$dbConnect["username"],$dbConnect["password"],$dbConnect["database"]);
# En als het niet klopt, dan gaan we gewoon lekker via de exit weg.
if(mysqli_connect_errno())
{
trigger_error('Fout bij verbinding: '.$mysqli->error);
}
else
{
# We gaan de query aanmaken met die onzin die daar bijhoort
$dbSql = "SELECT unit_num,hits FROM jos_ezrealty WHERE item = '" . mysqli_real_escape_string($dbLink, $item) . "'";
$dbResult = $dbLink->query($dbSql);
$dbNumRows = $dbResult->num_rows;
# Even kijken of het gelukt is.
if ($dbNumRows == true)
{
# Dan gaan we nu de query maken voor die andere database.
$sql = "INSERT INTO statistieken (unit_num,hits,datum) VALUES(
'" . mysqli_real_escape_string($dbLink, $dbRow->item) . "',
'" . mysqli_real_escape_string($dbLink, $dbRow->hits) . "',
DATENOW())";
$dbResult = $dbLink->query($dbSql);
$dbNumRows = $dbResult->num_rows;
if ($dbNumRows == true)
{
echo 'Yes! We kunnen gaan.';
}
else
{
echo 'Help! Het werkt niet. (2)';
}
}
else
{
echo 'Help! Het werkt niet. (1)';
}
}
?>