Tech Tidbits - Ruby, Ruby On Rails, Merb, .Net, Javascript, jQuery, Ajax, CSS...and other random bits and pieces.

Monday, July 16, 2007

PHP PEAR: MDB2

The PEAR DB class has been deprecated and replaced with MDB2.

MDB2 doesn't come with the MySQL driver out to the box, so you need to install that separately:


$ pear install MDB2
$ pear install MDB2_Driver_mysql


Here's a simple select, using the default fetchmode of MDB2_FETCHMODE_ORDERED.


<?
require_once "MDB2.php";

$dsn = 'mysql://my_username:@my_password@127.0.0.1/my_db';

$options = array(
'debug' => 2,
'result_buffering' => false,
);

$mdb2 =& MDB2::factory($dsn, $options);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}

// Proceed with a query...
$res =& $mdb2->query('SELECT * FROM my_table');

// Always check that result is not an error
if (PEAR::isError($res)) {
die($res->getMessage());
}

// Iterate through result set (assume default fetchmod is MDB2_FETCHMODE_ORDERED)
while (($row = $res->fetchRow())) {
echo $row[0] . " " . $row[1] . "<br/>\n";
}

?>


The three possible fetchmode values are:
1) MDB2_FETCHMODE_ORDERED (query results returned as array - column numbers are keys)
2) MDB2_FETCHMODE_ASSOC (query results returned as hash/associative array - column names are keys)
3) MDB2_FETCHMODE_OBJECT (query results returned as object - column names as properties)


To change the default fetchmode and use MDB2_FETCHMODE_ASSOC instead, use the setFetchMode method:


$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);


and then iterate through the results:


while ($row = $res->fetchRow()) {
echo $row['column_name_a'] . ' ' . $row['column_name_b'] . "<br/>\n";
}


Or you can change it per call:


while ($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)) {
echo $row['client_abbrv'] . ' ' . $row['client_name'] . "<br/>\n";
}


Here's an example of the first method:


<?
require_once "MDB2.php";

$dsn = 'mysql://my_username:@my_password@127.0.0.1/my_db';

$options = array(
'debug' => 2,
'result_buffering' => false,
);

$mdb2 =& MDB2::factory($dsn, $options);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}

// Set the fetchmode
$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);

// Proceed with a query...
$res =& $mdb2->query('SELECT * FROM my_table');

// Always check that result is not an error
if (PEAR::isError($res)) {
die($res->getMessage());
}

// Iterate through result set
while ($row = $res->fetchRow()) {
echo $row['column_name_a'] . ' ' . $row['column_name_b'] . "<br/>\n";
}

?>


You can insert data with a prepared statement:


<?
require_once "MDB2.php";

$dsn = 'mysql://my_username:@my_password@127.0.0.1/my_db';

$options = array(
'debug' => 2,
'result_buffering' => false,
);

$mdb2 =& MDB2::factory($dsn, $options);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}

// Insert
$statement = $mdb2->prepare('INSERT INTO clients VALUES (?, ?)');
$data = array($var1, $var2);
$statement->execute($data);
$statement->free();
?>


These are just the basics...read all the goodness here:

http://pear.php.net/manual/en/package.database.mdb2.php

Saturday, July 14, 2007

PHP PEAR: MDB2 Error: connect failed (localhost MySQL)

I ran into a persistent connect error when trying to connect to localhost MySQL database with MDB2.

Instead of:

dsn: mysql://my_username:my_password@localhost/my_db

use:

dsn: mysql://my_username:my_password@127.0.0.1/my_db

Thursday, July 5, 2007

Viewing Ruby Gem documentation

1) Command line

$ ri <gem_name>

2) Browser (http://localhost:8808)

$ gem_server

Emulate PHP5 str_split() in PHP4

/* emulate the php5 str_split function
* array str_split( string $string [, int $split_length])
* Converts a string to an array
* If the optional split_length param is specified, the returned array
* will be broken down into chunks with each being split_length in
* length, otherwise each chuck will be one character in length.
* False is returned if split_length is less than 1. If the split_length
* length exceeds the length of string, the entire string is returned
* as the first (and only) array element.
*/

If you want to use optional split_length:

function str_split($str, $l=1) {
$str_array = explode("\r\n", chunk_split($str,$l));
return $str_array;
}


Or optionally, if you just need the simple split (split_length=1):

function str_split($str) {
$str_array=array();
$len=strlen($str);
for($i=0; $i<$len; $i++) {
$str_array[]=$str{$i};
}
return $str_array;
}

Gem List

Here's a command to list all your installed Gems:

gem list | grep '^[a-zA-Z]'

Friday, June 8, 2007

APT Quick Reference

I found this handy apt-get Phil's APT Quick Reference...


Download and install package:

apt-get install package




Update apt's list of available packages:

apt-get update




Upgrade all installed packages with upgrades available:


apt-get upgrade




Upgrade to new distro, or in general upgrade anything available for update including core system packages:

apt-get dist-upgrade




Uninstall package:

apt-get remove package





Uninstall package, and its config files, and don't leave it in the database as 'uninstalled':

apt-get --purge remove package




Search for a package like pattern:

apt-cache search pattern





Get information on installed package:

dpkg -s package




Find which installed package file belongs to:

dpkg -S inetd.conf





List which files are in package:

apt-file list package




Find out what packages provide file:

apt-file search file





Run a command (such as ./configure or make) and have all necessary packages installed as needed:

auto-apt run command




Unless specified, the package in reference doesn't have to be already installed for these to work... but the database needs to be updated. You can update the appropriate database via:

apt-get update

or

auto-apt update

or

apt-file update


About Me

My photo
Developer (Ruby on Rails, iOS), musician/composer, Buddhist, HSP, Vegan, Aspie.

Labels