Jun 23 2009

MySQL: Rychlost UPDATE sloupce v závislosti na přítomnosti indexů

Nedávno jsme s Lukášem Churým a Ondrou Vašíčkem řešili rychlost operace UPDATE v závislosti na tom, jestli upravovaný sloupec má či nemá nastavený index.

Představte si, že máme v MySQL 5.0 tabulku o několika sloupcích, dva z nich jsou “id” a “xy”. Nad sloupcem “id” je přidělený index. Sloupec “xy” index nemá. Rychlost UPDATE sloupce “xy” trvá nějaký čas.

Otázka zní, jestli UPDATE zabere stejný čas i v případě, kdyby sloupec “xy” měl přidělený index.

Udělal jsem jednoduchý test, který přináší odpověď.

Pokračování článku


May 21 2009

Jak na to: SQL injection, magic_quotes_gpc, addslashes() a stripslashes()

V názvu článku jsem vyjmenoval slova, která jsou strašákem nejednoho PHP programátora. Strašák to je ale pouze uměle vytvořený, vycházející z neznalosti problematiky.

Dost často se ve spojení s SQL injection (typ útoku hackera) zmiňuje PHP konstanta magic_quotes_gpc. Prý, že pokud je zapnutá, tak se dá SQL injection předejít. A víte, že od PHP 5.3 bude standardně magic_quotes_gpc vypnutá?

Znamená to, že poté budou SQL dotazy napadnutelné pomocí SQL injection? Ale vůbec ne.

Konstanta magic_quotes_gpc totiž s ochranou SQL injection nemá v podstatě nic společného. Pouze zde existuje průsečík v možnosti jejího využití. Proto ji neznalí programátoři začali přisuzovat větší váhu, než má. Váha magic_quotes_gpc je samozřejmě nulová, zvláštně, když od PHP 5.3 bude vypnutá a v PHP 6 zanikne úplně.

Vysvětleme si tedy, oč jde. SQL injection je vážný problém.

Pokračování článku


May 10 2009

mPDF: Snadný export HTML stránek do PDF

FDFDoposud jsem neznal nějaký snadný a efektivní způsob exportu HTML stránek do PDF formátu, za pomocí PHP. Ano, existuje PHP třída FPDF, ale něco v ní vytvořit mi zrovna jako efektivní nepřijde. Viz kus kódu. Pokud byste FPDF přece jen použili, mrkněte k Zaachimu na blog. Radí tam, jak na české znaky.

Nad touto třídou existuje nástavba, troufám si říct “naštěstí”. Jmenuje se mPDF a nabízí přímý export z HTML stránek do PDF za podpory UTF-8 kódování, tedy s bezproblémovou interpretací českých znaků.

Pokračování článku


Dec 27 2008

FCKeditor: získání obsahu a vložení textu

Vytvoření formuláře FCKeditoru pomocí PHP

<?php
$oFCKeditor = new FCKeditor('body') ;
$oFCKeditor->Value = $form['body'];
$oFCKeditor->Create();
?>

Získání obsahu formuláře FCKeditoru:

<input type="button" onclick="alert(FCKeditorAPI.GetInstance('body').GetData());" value="Submit" />

Vložení textu do formuláře FCKeditoru:

<input type="button" onclick="FCKeditorAPI.GetInstance('body').InsertHtml('<strong>ahoj</strong>');" value="Submit" />


Dec 20 2008

RSS 2.0, MySQL a vytvoření data publikace (pubDate)

Kvůli RSS někdy potřebujeme vytvořit zápis data a času v požadovaném tvaru.

Třeba v takovém: Sat, 20 Dec 2008 13:21:00 GMT+1

Uvedený formát můžeme vygenerovat v PHP nebo přímo pomocí SQL dotazu.

Pokračování článku


Nov 21 2008

phpMyAdmin 3.0.1: blesková správa MySQL databáze

Při vývoji většinou pracuji přímo s databází na webhostingu (přes vzdálený přístup). Pokud je vyvíjená aplikace přístupná pro úzký okruh testerů, je daleko snazší, když webová aplikace využívá stejnou databázi, a to jak z localhostu, tak i přímo na serveru. Vždy mám totiž přístup ke stejným datům.

Proto nějaká lokální databáze, databáze na serveru, synchronizace, atp., jsou pro mě spíše zdržování. Abych si usnadnil práci a nemusel se připojovat na phpMyAdmina na serveru, využívám u sebe na localhostu lokální instalaci phpMyAdmin. Instalace je ale dosti nadnesené slovo. Stačí stáhnout, rozbalit, nastavit pět hodnot a spustit.

Doposud jsem využíval phpMyAdmin ve verzi 2.9.2. Nyní jsem přešel na phpMyAdmin 3.0.1.1. A co že přináší? Nejmarkantnější rozdíl oproti předchozí používané verzi je v rychlosti. Ta se totiž zvýšila, ale rapidně.

Pokračování článku


Nov 20 2008

Nový NetBeans IDE 6.5: nástroj pro PHP a JavaScriptové vývojáře

Vyšel nový NetBeans 6.5. Nabízí podporu pro skriptovací jazyk PHP, automatické dokončování funkcí, jejich napovídání s provázaností na třídy, kontrolu syntaxe a zvýraznění klíčových slov.

Součástí je ladící nástroj Xdebug. Nová verze dále přichází se vylepšenou podporou JavaScriptu, CSS a techniky AJAX. Můžete také například využít ladění JavaScriptu na Firefoxu a Internet Exploreru.

Pokračování článku


Nov 6 2008

PHP a XML: “Na začátku externí entity chybí procesní instrukce xml”

A zase ty hvězdičky! Přes AJAX mám řešené hodnocení něčeho. Kliknu na hodnocení, pošlou se data na zpracování, server vygeneruje XML, který se vrátí ke zpracování JavaScriptem (pro změnu stavu na stránce). Nutné je zdůraznit, že data jsou ve formátu XML vrácena zcela korektně. Přesto Firebug vypisuje chybu:

Na začátku externí entity chybí procesní instrukce xml
undefined

Aby se nám to ještě trochu zamotalo, tak se tato chyba vyskytuje pouze, pokud script spouštím na localhostu. Na serveru funguje bez problémů. Chyba byla způsobena includovanými soubory.

Pokračování článku


Nov 3 2008

MySQL: Jak získat poslední vložené ID?

Když už zase psát, tak ať je to užitečné.

Určitě jste někdy při práci s databází (MySQL) chtěli zjistit ID nového prvku, který jste vložili přes příkaz INSERT. PHP nabízí funkci mysql_insert_id(), která přesně toto umožňuje. Vrátí generovanou hodnotu ID posledního příkazu INSERT. Je tedy nutné, aby se funkce mysql_insert_id() nacházela bezprostředně za dotazem s příkazem INSERT.

Tabulka musí obsahovat sloupec s nastaveným AUTO_INCREMENT. Hodnotu vloženého ID můžete také zjistit přímo přes SQL dotaz. Stačí použít funkci LAST_INSERT_ID().


Oct 21 2008

Rychlost: date() vs. mktime() vs. getdate()

Rychlostně efektivní vytvoření data a času. Využití PHP s časovým posunem -180 s. Řetězec ve formátu: 2008-07-27 16:02:57.

Pokračování článku