fastMySQL

wex 06.07.04 19:06

Classi MySQL:n käyttämiseen.

 Tekstiversio  Arvo: 7 (13 ääntä)  Äänestä: +  -
/* index.php */
<?php
require('fmysql.php');

# Otetaan classi käytettäväksi. Asetetaan yhteyteen tarvittavat tiedot.
$mysql = new fMySql('hostname', 'username', 'password', 'database');

# Luodaan yhteys palvelimeen ja tietokantaan.
$mysql->connect();

# Tulostetaan queryn tulos
print_r($mysql->querytoarray("SHOW TABLES"));

# Suljetaan yhteys
$mysql->close();
?>

/* errors.php */
<?php
define('MYSQL_OK', 0);
define('MYSQL_EMPTY', 1);
define('MYSQL_CONNFAILED', 2);
define('MYSQL_SELECTDBFAILED', 4);
define('MYSQL_CLOSEFAILED', 8);
define('MYSQL_QUERYFAILED', 16);
?>

/* fmysql.php */
<?php
###                                    ###
# fMySQL v1.0.0   niko dot hujanen at saunalahti dot fi #
###                                    ###

# Requires
require('errors.php');

# Start of class

class fMySql {
 var $class_Version = '1.0.0';
 var $link;
 var $sql_hostname, $sql_username, $sql_password, $sql_db;

 function fMySql($mysql_hostname, $mysql_username, $mysql_password, $mysql_db) {
  $this->sql_hostname = $mysql_hostname;
  $this->sql_username = $mysql_username;
  $this->sql_password = $mysql_password;
  $this->sql_db       = $mysql_db;
 }

 function connect() {
 /*
  function: connect()
  - Creates link to MySQL-database
 */

  $ret = MYSQL_OK;
  $this->link = mysql_connect($this->sql_hostname, $this->sql_username, $this->sql_password) or $ret = MYSQL_CONNFAILED;
  mysql_select-db($this->sql_db, $this->link) or $ret = MYSQL_SELECTDBFAILED;
  return $ret;
 }

 function query($mysql_query) {
 /*
  function: query(string)
  - Queries the string to MySQL
  - Returns the resourceid or errorvalue
 */

  $ret = MYSQL_EMPTY;
  $ret = mysql_query($mysql_query, $this->link) or $ret = MYSQL_QUERYFAILED;
  return $ret;
 }

 function querytoarray($mysql_query) {
 /*
  function: querytoarray(string)
  - Queries the string to MySQL
  - Returns the data in array
 */

  $result = mysql_query($mysql_query, $this->link) or $ret = MYSQL_QUERYFAILED;
  while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
   $ret[] = $row;
  }
  if ($ret == NULL) { return MYSQL_EMPTY; } else { return $ret; }
 }

 function close() {
 /*
  function: close()
  - Closes the link to MySQL-database
 */

  $ret = MYSQL_OK;
  mysql_close($this->link) or $ret = MYSQL_CLOSEFAILED;
  return $ret;
 }

 function getversion() {
  return $this->class_Version;
 }
}
?>

wex 19:11 6.7.04 
Nuo "tiedostonimikommentit" meni koodin ulkopuolelle, mutta olkoon se kosmisena haittana tässä.

Tein tämän helpottamaan omaa elämääni, ja se on vielä osittain aika alkuvaiheissa.

Parannusehdotuksia? :)
emoporo 21:50 6.7.04 
No jaa, koodissa ei ole mitään vikaa mutta suht turhaa se on tuollaista wrapperia pyörittää kun niitä funktioita on muutenkin niin helppo käyttää.
Mutta eipä tuolla väliä, annan plussan silti.
editoitu: 03:18 7.7.04
wex 03:18 7.7.04 
Onhan se turhaa tavallaan. Itse taas kyllästyttää se ainainen roinan kirjoittelua.
Pidän tätä siis lähinnä lyhennyksenä ;)

Yhden parannuksen taidan tehdä huomenissa, ja se liittyy query -funktioon.
Eli toimimaan while ($ret = $mysql->query("...")) { ... }

querytoarray saa myös jäädä pois tuon myötä. Se oli muutenkin täysin kokeilumielessä värkätty alunperin tähän.

Ehkäpä myös pconnect_mysql -mahdollisuus.
editoitu: 09:59 7.7.04
empty 09:46 7.7.04 
Ihan jees, itsekkin joskus vastaavan väsäsin. Mutta tuo omien virhekoodien käyttö on vähän kyseenalaista, ainakin minusta tuntuu että se vain hankaloittaa virheiden käsittelyä. Mielummin vaikka näin.

$result = mysql_query($mysql_query, $this->link) or trigger_error("MySQL error ".mysql_errno().": ".mysql_error(), E_USER_ERROR);

Nyt kun kirjoitat oman virhekäsittelijäsi, niin voit tehdä noille E_USER_ERROR virheille mitä haluat.

Ja tekisin tuohon vielä AdoDB tyyliin debug ominaisuuden. Eli jos debug on päällä niin SQL-lauseet tulostetaan ennen suorittamista. Mielestäni todella kätevä ominaisuus.

ihmepoka 15:30 9.7.04 
Kyllä tuollaisen luokan käyttäminen nopeuttaa ja helpottaa mielestäni koodaamista ja koodistakin tulee selkeämpää kun ei tarvitse niitä mysql funktioita lykkiä joka väliin. Itse olen käyttänyt muutamassa viimeisimmässä projektissa seuraavanlaista valmista luokkaa:
http://www.jvmultimedia.com/home/articles.php?articleId=2
ja olen ollut kyllä tyytyväinen siihen eli suosittelen. Mutta kyllähän sitä kun itse koodaa niin saa juuri sellaisen kun haluaa ja ihan hyvältä tuo näyttää.
editoitu: 11:02 12.7.04
empty 11:01 12.7.04 
Wrapperit ovat kyllä hyodyllisiä, mutta niitähän on valmiina jo miljoona. Itse käytän yleensä PEAR-DB :tä, tai ADOdb :ta, jotka kummatkin ovat todella päteviä.
-nD- 17:25 12.7.04 
Oisi kätevää jos toi tukisi muitakin db:tä

saat silti plussa ku emmä ite noist classeist mitää tajuu
wex 02:52 15.7.04 
Seuraava versio tästä ilmestyy, kun saan tämänhetkisen url-checkerin valmiiksi.

Seuraavaan versioon mukaan vaikka moinen debugmoodi, korjauksia virheenkäsittelyyn, lisää funktioita (luonnollisesti) ja ehkäpä vielä muutamat tutoriaalit :)
AdoDBtä joskus käytellyt olen, ja se on kyllä kieltämättä ihan kätevä.
Katotaan jos muita tietokantoja saisin tuetuksi järkevillä tavoilla. :)