Přehled nejjednodušších úkonů při práci php s databází MySQL
Odkaz na manuál dev.mysql.com
<?php
// globals.php (tento soubor by měl být umístěn v nepřístupném adresáři)
$hostName = "nejakysqlserver.com" ;
$userName = "mujlogin" ;
$password = "meheslo" ;
$databaseName = "dbnazev" ;
$link=MySQL_pconnect($hostName, $userName, $password) or die ("Nepodařilo se spojení s databází.");
MySQL_select_db($databaseName, $link) or die ("Nepodařilo se označit databázi.");
extract($_REQUEST,EXTR_SKIP); //získání proměnných ze superglobálního pole
?>
____________________________________________________________________________________
<?php
//vytvorTb.php
require("globals.php") ;
$vytvortb = "CREATE TABLE mojetb(
endatum INT(11),
datum VARCHAR(20),
autor VARCHAR(100) BINARY NOT NULL,
celyobsah MEDIUMTEXT,
constraint mojetb PRIMARY KEY(autor,celyobsah)
)" ;
//MEDIUMTEXT či VARCHAR je case insensitivní pro vyhledávání,
//MEDIUMBLOB (binární) či VARCHAR BINARY je case sensitivní (to už dodatečně zpravidla nelze změnit na ASCII)
//constraint mojetb PRIMARY KEY(autor,celyobsah) - zabrání duplikování řádků se stejným autorem i dílem.
//rowid INT AUTO_INCREMENT PRIMARY KEY - automaticky se generuje číslo řádku (nepřečísluje se pak při vymazání některých řádků)
if (MySQL_Query($vytvortb)) echo "Tabulka mojetb vytvořena"; else exit("Tabulka mojetb nevytvořena: ".mysql_error());
?>
____________________________________________________________________________________
<?php
//pridejRadek.php
require("globals.php") ;
$endatum = date('U');
MySQL_Query("INSERT into mojetb(endatum, datum, autor, celyobsah) values('$endatum','$datum', '$autor', '$celyobsah')") or die ("Chyba při zpracování dotazu");
/// Pokud jsou nastaveny magic_quotes_gpc is na "on", přidávají se automaticky pro data zaslaná v post či get backslashe před: jednoduché a dvojité uvozovky, backslashe a null.
/// V ostatních případech (vypnuté magic_quotes_gpc, proměnná získaná ze scriptu) je třeba vkládaná data opatřit addslashes(), ve výpisu pak stripslashes() a ev.: $str = str_replace("%","%%",$str); ev. i ošetřit podtržítka _.
?>
____________________________________________________________________________________
<?
//pridejRadky.php
require("globals.php") ;
$filename = "anglicko-cesky.txt";
$pole = file ($filename);
while (list (, $line) = each ($pole)) {
list($cs,$en) = explode("=",$line);
$cs = addslashes($cs);
$en = addslashes($en);
MySQL_Query("INSERT into slovnik(cs,en) values('$cs','$en')") or die ("Chyba při zpracování dotazu: ".mysql_error());
}
echo "hotovo";
?>
____________________________________________________________________________________
<?php
//zmenRadek.php
require("globals.php") ;
MySQL_Query("UPDATE mojetb SET datum='$datum', autor='$autor', celyobsah='$celyobsah'
WHERE endatum LIKE '$endatum'") or die("Chyba při zpracování dotazu"); //pokud je endatum číslo, pak endatum = $endatum
?>
____________________________________________________________________________________
<?php
//vypisData.php
require("globals.php");
$sel = MySQL_Query("SELECT * FROM mojetb ORDER by cas DESC");//vybere vše // odstranit duplicity: "SELECT DISTINCT * FROM
echo "<h4>".mysql_result($sel,0)."</h4>";//vypíše první položku prvního (tj. nultého) řádku
mysql_data_seek($sel, 0); //vrátí se znovu na nulu, jinak by se po každé iteraci přešlo na další řádek
echo "<h4>".mysql_result($sel,0,"autor")."</h4>";//vypíše položku autor z prvního (tj. nultého) řádku
mysql_data_seek($sel, 0); //vrátí se znovu na nulu
//vypíše všechny řádky:
while ($polozka = mysql_fetch_assoc($sel)){ //mysql_fetch_assoc() - associativní pole, podobné jsou mysql_fetch_row() - číselné pole, a mysql_fetch_array() - oboje
echo '<input value="'.htmlspecialchars($polozka[autor]).'"><br>';
echo '<textarea>'.htmlspecialchars($polozka[celyobsah])."</textarea>";
}
?>
____________________________________________________________________________________
<?php
//search.php
require("globals.php") ;
$oznac = MySQL_Query("
SELECT endatum,autor,celyobsah
FROM mojetb
WHERE celyobsah LIKE '%$vyraz%' OR autor LIKE '%$vyraz%'
ORDER BY endatum DESC
LIMIT $zacatek,$pocetnastranku
") or die("Chyba při zpracování dotazu"); // % nahrazuje libovolnou skupinu znaků, _ nahrazuje jeden libovolný znak
echo 'Nalezeno <b>'.MySQL_num_rows($oznac).'</b> záznamů.<br>';
while ($polozka = mysql_fetch_array($oznac)){
echo '<li><a href="stranka.php?ed='.$polozka[endatum].'">'.$polozka[autor].'</a></li>'."\n";
}
?>
____________________________________________________________________________________
<?
//propojeniDvouTabulek.php
require("globals.php") ;
$sel = MySQL_Query("
SELECT mojetb.jmeno, mojetb2.dilo
FROM mojetb, mojetb2
WHERE mojetb.spolecne = mojetb2.spolecne
AND mojetb.spolecne LIKE 'hrabal'
" );
echo "<h4>".mysql_result($sel,0)."</h4>";
mysql_data_seek($sel, 0); //vrátí se znovu na nulu
while ($polozka = mysql_fetch_array($sel)){
echo $polozka[jmeno].": ";
echo $polozka[dilo]."<br>";
}
?>
____________________________________________________________________________________
<?php
//dalsiDotazy.php
require("globals.php") ;
if (MySQL_Query( "TRUNCATE TABLE slovnik")) echo "Tabulka vyprázdněna"; else exit("Tabulka nevyprázdněna: ".mysql_error());; //vyprázdní tabulku
if (MySQL_Query( "DROP TABLE IF EXISTS slovnik")) echo "Tabulka smazána"; else exit("Tabulka nesmazána: ".mysql_error());; //smaže tabulku
if (MySQL_Query( "ALTER TABLE `slovnik2` CHANGE `en` `en` VARCHAR( 100 ) NOT NULL ,
CHANGE `cs` `cs` VARCHAR( 100 ) BINARY NOT NULL ")) echo "Sloupec změněn"; else exit("Sloupec nezměněn: ".mysql_error());; //změní sloupec
if (MySQL_Query( "DELETE FROM slovnik WHERE tensloupec = `sloup`")) echo "Řádek smazán"; else exit("Řádek nesmazán: ".mysql_error());; //smaže řádek;
if (MySQL_Query( "ALTER TABLE `mojetb` ADD `novysloup` VARCHAR( 3 ) NOT NULL AFTER `nejakysloup`")) echo "Sloupec přidán"; else exit("Sloupec nepřidán: ".mysql_error()); //přidá sloupec;
if (MySQL_Query( "ALTER TABLE `mojetb` DROP `novysloup` ")) echo "Sloupec smazán"; else exit("Sloupec smazán: ".mysql_error()); //smaže sloupec;
MySQL_Query( "UPDATE mojetb SET sloupec = REPLACE (sloupec,`neco`, `zaneco`)"); //nahradí slova ve sloupci;
MySQL_Query( "ALTER TABLE mojet ADD PRIMARY KEY (rok, mesic, den, hodina); "); //primární klíč (zabrání duplicitám řádků);
MySQL_Query("ALTER TABLE mojet MODIFY COLUMN jeden char(3) not null AFTER jiny" ); //změní pořadí slopuců
MySQL_Query("SELECT LENGTH(`neco`) AS neco FROM `tabulka` WHERE `ID` LIKE mysql_real_escape_string($_REQUEST[zaznam]) ");
//
$celkem = MySQL_Query("SELECT SUM(hodnota) FROM mojetb"); //suma
$suma = mysql_result($celkem,0);
//
$pocet = MySQL_Query("SELECT COUNT(*) AS hodnota FROM mojetb"); //počet prvků
$count = mysql_result($pocet,0);
MySQL_Query( "SELECT hlasu1+hlasu2+hlasu3+hlasu4+hlasu5+hlasu6 AS hlasu FROM ankety ORDER BY hlasu"); //sečte sloupce v řádku
MySQL_Query( "SELECT neco FROM $tableName WHERE neco REGEXP '[il]{2}' ");// regulární výrazy
MySQL_Query("SELECT `slovo` AS oboje FROM novaslova UNION SELECT `slovo` AS oboje FROM kratkaslova ORDER BY RAND()"); // ze dvou tabulek a náhodně seřadit
?>
____________________________________________________________________________________
<?php
//fulltextoveVyhledavani.php
require("globals.php") ;
$oznac = MySQL_Query("SELECT * FROM $tableName WHERE MATCH(DESCRIPTION) AGAINST('požádání' IN BOOLEAN MODE)") or die(mysql_error());
echo 'Nalezeno <b>'.MySQL_num_rows($oznac).'</b> záznamů.<br>';
while ($polozka = mysql_fetch_array($oznac)){
echo '<li><a href="cz.php?st='.$polozka[nazevascii].'">'.$polozka[nazev].'</a></li>'."\n";
}
// IN BOOLEAN MODE - v tomto případě nemusí být vytvořen fulltext.
// toto umožňuje vyhledávání s operátory +, -, "", *, <, >, (). V případě vytvořeného fulltextu lze řadit výsledky dle počtu v jednotlivých stránkách, hledání je rychlejší, avšak ukládání do DB pomalejší.
?>
____________________________________________________________________________________
Odkazy na:
Fultext 1
Fultext 2
Fultext 3