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ářů(26)
Jeffpoonia - 2017-10-15  16:11:57
 Sildenafil Tab 20mg Doxycycline Online Canada No Prescription Priligy Review [url=http://cialgeneri.com ]cialis[/url] Buy Amoxicillin For Pet Without Prescription Generic Levitra Pill
Haroreab - 2017-10-13  18:27:37
 Cialis Tratamiento Prolongado Celebrex Discount Coupon Viagra Giapponese [url=http://cheapvia50mg.com]viagra[/url] Levitra 100mg
Haroreab - 2017-10-09  07:47:09
 Keflex Sunscreen [url=http://ordercheapvia.com]viagra[/url] Quanto Costa Il Cialis In Italia Cephalexin For Dogs Non Perscription
Haroreab - 2017-10-09  07:47:08
 Keflex Sunscreen [url=http://ordercheapvia.com]viagra[/url] Quanto Costa Il Cialis In Italia Cephalexin For Dogs Non Perscription
Haroreab - 2017-10-09  07:47:07
 Keflex Sunscreen [url=http://ordercheapvia.com]viagra[/url] Quanto Costa Il Cialis In Italia Cephalexin For Dogs Non Perscription
Haroreab - 2017-10-09  07:47:06
 Keflex Sunscreen [url=http://ordercheapvia.com]viagra[/url] Quanto Costa Il Cialis In Italia Cephalexin For Dogs Non Perscription
Haroreab - 2017-10-06  07:12:08
 Cialis 20 En Madrid Flagyl Online In Uk [url=http://orderlevi.com]vardenafil hcl 20mg tab[/url] Buy Prednisone 20 Mg Tablets
Haroreab - 2017-09-29  19:45:13
 Zithromax Take All At Once Kamagra Aus Uk Amoxil 500 [url=http://costofcial.com ]cialis[/url] Cvs Buy Propecia Cialis Rezeptfrei Schneller Versand Inland Priligy Discount
Haroreab - 2017-09-29  19:45:11
 Zithromax Take All At Once Kamagra Aus Uk Amoxil 500 [url=http://costofcial.com ]cialis[/url] Cvs Buy Propecia Cialis Rezeptfrei Schneller Versand Inland Priligy Discount
Haroreab - 2017-09-29  19:45:10
 Zithromax Take All At Once Kamagra Aus Uk Amoxil 500 [url=http://costofcial.com ]cialis[/url] Cvs Buy Propecia Cialis Rezeptfrei Schneller Versand Inland Priligy Discount
Haroreab - 2017-09-29  19:45:09
 Zithromax Take All At Once Kamagra Aus Uk Amoxil 500 [url=http://costofcial.com ]cialis[/url] Cvs Buy Propecia Cialis Rezeptfrei Schneller Versand Inland Priligy Discount
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
[1] [2] 
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.