mark1048 0 Newbie Poster

Configuring PHP with MySQL

Intro

To use PHP with MySQL, of course you need to install MySQL server on you system first. On my local system, I have MySQL server installed in \mysql directory. If you need help on installing MySQL on your system, please read "Herong's Notes on SQL". To make sure MySQL is running on my local system, I did this in a command window:

>\mysql\bin\mysqld 

>\mysql\bin\mysqladmin ping
mysqld is alive

Getting started

Now edit \php\php.ini with:

extension=php_mysql.dll

Then add \php\ext to the PATH system environment variable.

I think we are ready to test the configuration. Run this script:

<?php # MySqlTest.php
# Copyright (c) 2002 by Dr. Herong Yang
# 
   $con = mysql_connect('localhost');
   print "MySQL server info = ".mysql_get_server_info()."\n";
   print "MySQL status = ".mysql_stat()."\n";
   mysql_close($con);
?>

You should get something like:

C:\herong\php_20050403\src>php MySqlTest.php
MySQL server info = 5.0.2-alpha
MySQL status = Uptime: 1167  Threads: 1  Questions: 5  Slow querie...
  Flush tables: 1  Open tables: 0  Queries per second avg: 0.004

Cool, I can now access my MySQL server from PHP scripts.

PHP's MySQL Support

PHP's MySQL support comes from an extension library, php_mysql.dll, which offeres a number of functions:

mysql_connect() - Connects to a MySQL server, and returns a connection resource.

mysql_close() - Closes a MySQL connection resource.

mysql_get_server_info() - Returns a string of server information.

mysql_status() - Returns a string of server status.

mysql_query() - Sends a query to the server, and returns a result set resource.

mysql_affected_rows() - Returns the number of effected rows of the given result set, if the executed query is an INSERT or UPDATE statement.

mysql_num_rows() - Returns the number of rows of the given result set, if the executed query is a SELECT statement.

mysql_fetch_array() - Fetches a row from a given result set, and returns the row as an array with both numeric index, and column name map. It will return boolean false, if there is no row left in the result set.

mysql_free_result() - Frees the given result set.


MySQL Test - MySqlLoop.php

To show you some those functions should be used, I wrote this simple script, MySqlLoop.php:

<?php # MySqlLoop.php
# Copyright (c) 2002 by Dr. Herong Yang
# 
   $con = mysql_connect('localhost');
   $rs = mysql_query('DROP DATABASE MyBase');
   $rs = mysql_query('CREATE DATABASE MyBase');
   $rs = mysql_query('USE MyBase');
   print "Creating a table...\n";
   $rs = mysql_query('CREATE TABLE MyTable (ID INTEGER,'
      .' Value INTEGER)');
   $n = 100;
   $i = 0;
   print "Inserting some rows to the table...\n";
   while ($i < $n) {
      $rs = mysql_query('INSERT INTO MyTable VALUES ('.$i.', '
         .rand(0,$n-1).')');
      $i++;
   }
   print "Query some rows from the table...\n";
   $rs = mysql_query('SELECT * FROM MyTable WHERE ID < 10');
   print "   ".mysql_field_name($rs,0)."   "
      .mysql_field_name($rs,1)."\n";
   while ($row = mysql_fetch_array($rs)) {
      print "    ".$row[0].'   '.$row[1]."\n";
   }
   mysql_free_result($rs);   
   mysql_close($con);
?>

Note that if the connection resource is not specified in a query call, the last connection resource will be used. If you run this script, you will get something like:

Creating a table...
Inserting some rows to the table...
Query some rows from the table...
   ID   Value
    0   14
    1   91
    2   84
    3   16
    4   88
    5   51
    6   12
    7   19
    8   39
    9   5

Conclusion

PHP supports MySQL through an extension library.
Configuring PHP to with a MySQL server is simple.
Database functions are server dependent.