Základy MySQL – část. 2 ( Spojení PHP a MySQL )

 2012-06-14 00:00:00
 Dmitry Burobin

V tomto článku spojíme MySQL s PHP. Ukážu Vám jak pracovat s MySQL databázi pomocí PHP s příkazy, které jsem Vám ukázal v prvním článku o MySQL. Taktéž spojení s databází.

Série článků:
1) Základy MySQL - část 1.
2) Základy MySQL – část. 2 ( Spojení PHP a MySQL )

Spojení

Zaprvé vytvoříme tabulku pokus v databázi test:

CREATE TABLE `pokus`(                      
`id` INT( 5 ) NOT NULL AUTO_INCREMENT,    
`name` VARCHAR ( 255 ) NOT NULL,          
`zprava` TEXT NOT NULL,                   
PRIMARY KEY(`id`)                          
)ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci

Druhá věc, kterou potřebujeme udělat pro práci s databází je připojit se k ní. K navázání spojení použíjeme funkce mysql_connect a mysql_select_db. Vytvořime nový soubor a uložíme ho jako config.inc.php, bude mít následující obsah:

<?php
$DBSERVER 'localhost'//server, který bude použít pro navázáníspojení s DB
$DBUSER 'root'//Váš mysql login, nejspíš je stejný jako u mě pro localhost, tudiž root
$DBPASS '****'//heslo, které jste zadavali při instalaci MySQL

$DB 'test'//databáze, s kterou budeme pracovat

//navazení spojení pomoci mysql_connect 
$link mysql_connect($DBSERVER$DBUSER$DBPASS)  or die("Could not connect: " mysql_error());
//vybírame databázi
mysql_select_db($DB$link) or die ('Can\'t use test : ' mysql_error());
//řekněme MySQL, že všechná data jsou ve formatu UTF-8
mysql_query("SET NAMES UTF8");
?>

Vložíme do tabulky nějaká data ( INSERT )

Pro operace s tabulkama se používa funkce mysql_query(). Teď vložíme do tabulky data, s kterýma budeme pracovat. Vytvořte si nový soubor ve stejné složce a uložte ho třeba jako index.php.

<?php
//Zaprvé načteme do něj náš soubor s připojením k DB. Použávam rád funkci require_once, 
//ale můžete taký použít include, require a další funkce.
require_once ("config.inc.php"); 

//Vložíme nějaka data: Pavel, Pavel_message a Lenka, Lenka_message
$query "INSERT INTO `pokus`(`name`,`zprava`) VALUES
 ('Pavel','Pavel_message'), 
('Lenka','Lenka_message')"
;
$result mysql_query($query);
if(!
$result) echo  mysql_error() . " - " mysql_errno();
else echo 
'Data jsou uspesne vlozena do tabulky';
?>
mělo by se Vám vyvést na obrazovku, že data jsou úspěšně vložena do tabulky.

Vybírání dat ( SELECT )

Teď vypíšeme obsah naše tabulky na obrazovku, k tomu abysme prošli celou tabulkou použíjeme funkci mysql_fetch_assoc() a cyklus while. Do stejného souboru index.php ( dále budeme pracovat jen s index.php ) doplňime:

<?php
//vyber všechno z tabulky pokus a seřaď podle id
$query_sel "SELECT * FROM `pokus` ORDER BY `id`";
//dalším řádkem řekněme, že $query_sel je MySQL příkazem.
//Jde to napsat i do jednoho řádku, ale já preferuji tuhle metodu 
$result_sel mysql_query($query_sel);
//jestli příkaz nebyl vykonán
if(!$result_sel
    {
//pak se vypiše chybné hlášení
        
echo  mysql_error() . " - " mysql_errno();
    }
//v případě, že chyba nenastla
    
else
    {
//projdeme celou tabulku pomoci cyklusu while a 
//každý řádek tabulky a vrátime asociativní pole 
        
while($row mysql_fetch_assoc($result_sel))
        {
//dopsal jsem značku p jen proto, aby se každý záznam vypisoval
//do samostatného bloku 
            
echo "<p>";
//konstrukce volání dat z tabulky je poměrně jednoduchá řádek['pole']
            
echo "Jmeno: " $row['name'] . "<br>";
            echo 
"Zprava: " $row['zprava'];
            echo 
"</p>";
        }
    }
?>

Výsledek by měl být následující:

Jmeno: Pavel
Zprava: Pavel_message

Jmeno: Lenka
Zprava: Lenka_message

Uděláme jěště jeden příklad, jelikož při každém načtení stránky se nám vkládájí stejná data do tabulky, projdeme celou tabulkou a zjístime zda v ní už jsou záznamy se jmény Pavel a Lenka. Jestli jsou tak už je do tabulky vkládát nebudeme a vyvedeme hlášení. Pro realizaci použíjeme ještě jednu funkci mysql_num_rows(), která vráci počet dotčených řádků. Najdeme tuhle část kódu:

<?php
//Vložíme nějaka data: Pavel, Pavel_message a Lenka, Lenka_message
$query "INSERT INTO `pokus`(`name`,`zprava`) VALUES
 ('Pavel','Pavel_message'), 
('Lenka','Lenka_message')"
;
$result mysql_query($query);
if(!
$result) echo  mysql_error() . " - " mysql_errno();
else echo 
'Data jsou uspesne vlozena do tabulky';
?>
a modifikujeme ji:
<?php
//Vyber všechno z tabulky pokus se jménem buď Pavel nebo Lenka 
$q_name "SELECT * FROM `pokus` WHERE `name` IN('Pavel','Lenka')";
$r_name mysql_query($q_name);
if(!
$r_name)
{
     echo  
mysql_error() . " - " mysql_errno();
}else{
//jestli počet dotčených řádků je nula jinými slovy
//jestli v tabulce není záznam u kterého pole name se rovná
//Pavel nebo Lenka, pak vložíme tyto záznamy
     
if(mysql_num_rows($r_name)==0)
     {
         
//Vložíme nějaka data: Pavel, Pavel_message a Lenka, Lenka_message
$query "INSERT INTO `pokus`(`name`,`zprava`) VALUES ('Pavel','Pavel_message'), ('Lenka','Lenka_message'), ('dsf','Lenkasdfmessage')";
$result mysql_query($query);
if(!
$result) echo  mysql_error() . " - " mysql_errno();
else echo 
'Data uspesne vlozena do tabulky';
//v případě, že už jsou vyvedemé hlášení
     
} else { echo 'Zaznam s timto jmenem uz je v tabulce'; }
}
?>
abyste si to mohli vyzkoušet tak vložte někam do souboru tento řádek:
<?php
//tento příkaz vyprázdní tabulku pokus
$q mysql_query("TRUNCATE TABLE `pokus`");
?>
nebo to můžete udělat ručně pomocí phpmyadmin.

Upravování dat ( UPDATE ) a odstraňování dat ( DELETE )

Ukážu Vám jenom příklady, protože k tomuto není třeba něco psat =)

<?php
/*Upravovani dat*/

$query_update "UPDATE `pokus` SET `zprava`='nova_zprava' WHERE `name`='Pavel'";
$result_update mysql_query($query_update);
//jestli příkaz nebyl vykonán
if(!$result_update
    {
//pak se vypiše chybné hlášení
        
echo  mysql_error() . " - " mysql_errno();
    }
//v případě, že chyba nenastla
    
else
    {
        echo 
"Zmena probehla uspesne";
    }
    
?>
<?php
/*Odstranovani dat*/

$query_delete "DELETE FROM `pokus` WHERE `name`='Pavel'";
$result_delete mysql_query($query_delete);
//jestli příkaz nebyl vykonán
if(!$result_delete
    {
//pak se vypiše chybné hlášení
        
echo  mysql_error() . " - " mysql_errno();
    }
//v případě, že chyba nenastla
    
else
    {
        echo 
"Zaznam vymazan uspesne";
    }
?>

Konfigurační soubor a Index.php: archiv
Systém Orphus
Napište komentář.
Celkem komenrářů(15)
Admin - 2014-07-11  09:33:53
 Zdravím, děkuji. Zkusím na to najít čas a určitě něco napišu o JS.
Tomáš Fuk - 2014-07-08  10:25:12
 Ahoj, opravdu super! Moc se mi líbí tvoje tutoriály a taky bych byl rád kdyby jsi napsal ještě něco...Já osobně bych uvítal kdyby jsi udělal tutoriál na JavaScripty. Díky moc.
Admin - 2014-02-14  07:21:36
 Zdravím, diky. Neplánuji, ale pokud bys nabídnul nějaké téma, tak můžu napsat. Co přesně ještě potřebuješ ?
Korem - 2014-02-13  22:13:21
 Ahoj, díky moc za super tutoriály, líbí se mi a jelikož chci na zkušenou do německa (přes itprace-nemecko) a právě se snažím co nejvíce pochytat :D Chci se tě zeptat, neplánuješ další díly? Byl bych ti za to moc vděčný :)
Lamicz - 2013-03-03  16:39:00
 Jen na okraj je myslím dobré připomenout, že mysql_* fce jsou již považovány za zastaralé a budou v některé z dalších verzí PHP odstraněny. Nové scripty by měly používat mysqli nebo PDO. mysqli je pro začátečníka IMHO lepší, protože existuje jak fce tak metoda (procedurální i objektový přístup), kdežto PDO je pouze objektové.
Marian - 2012-09-18  19:05:50
 Už to funguje :) děkuju
Dmitry - 2012-09-16  23:40:47
 Podivejte se ještě jestli mate nastavený php jako modul apache:

LoadModule php5_module "c:/server/php/php5apache2_2.dll"

PHPIniDir "C:\server\php\php.ini"



Jaky mate lokální server? Nainstalovaný z balíčku nebo jste si ho ručně nastavoval a instaloval?
Marian - 2012-09-16  22:03:08
 Nic .. vše je stejné jako soubory ke stažení, dokonce i po nahrazení nově stáhnutým konfiguračním souborem se to nezlepšilo..
Dmitry - 2012-09-13  10:18:48
 Určitě to bude nastavením lokálního serveru ( Apache ). Porovnejte Vás konfigurační soubor Apache s mým z článku č. 3
Marian - 2012-09-12  01:46:57
 Toto tam mám všechno :( dokonce i něco navíc:

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php phtml php

Nenapadá vás ještě něco jiného čím by to mohlo být??
Dmitry - 2012-09-11  20:08:58
 podívejte se na nastaveni lokálního serveru, popisoval jsem to ve třetím článku. Hlavně by tam mělo být toto:

DirectoryIndex index.html index.htm index.php index.php5


a


AddType application/x-httpd-php .php

AddType application
/x-httpd-php-source .phps

AddType application
/x-httpd-php phtml php


Marian - 2012-09-09  15:14:49
 Stáhl jsem i vaše soubory a udělalo to to samé.. Po spuštění indexu se vyhodí okno s tabulkou pro stahování ...

http://leteckaposta.cz/401421189
Marian - 2012-09-02  02:08:18
 Moje chybka ,, mysleno tak ze mysql je slozka na lokalnim serveru ve ktere se nachazi tyto dva soubory, ... Musim vytvorit soubor config.inc.php nebo jej jen upravim nekde v nastavenich mych programu, to je asi to co nechapu,, ja jej vytvoril podle navodu nahore a vedle nej vlozil index.php a misto toho aby se to propojilo a vlozily data do tabulky v phpmyadmin tak to vyhodilo po spusteni stranku s tabulkou na stazeni (po stazeni se stahne soubor indexu ..)
Dmitry - 2012-09-01  17:09:14
 Zdravím, myslíte složku phpmyadmin nebo mysql? V MySQL složce byste neměl nic měnít, akorat konfigurační soubor. Nefunguje Vám lokální server?
Marian - 2012-08-31  21:21:57
 Vytvořena db i tabulka, na lokalnim serveru slozka mysql a v ni soubor config.inc.php a vedle neho index.php,, po spusteni indexu se misto cehokoli opet ukaze tabulecka s moznosti stahovani tohoto souboru, nic vic to nedela, v cem je chyba ? :(
[1] 
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.