PHP
downloads | documentation | faq | getting help | mailing lists | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

mysql_affected_rows> <msql
Last updated: Sat, 17 Jul 2004

view this page in

LXVII. MySQL Functions

Introduction

These functions allow you to access MySQL database servers. More information about MySQL can be found at http://www.mysql.com/.

Documentation for MySQL can be found at http://dev.mysql.com/doc/.

Requirements

In order to have these functions available, you must compile PHP with MySQL support.

Installation

By using the --with-mysql[=DIR] configuration option you enable PHP to access MySQL databases.

In PHP 4, the option --with-mysql is enabled by default. To disable this default behavior, you may use the --without-mysql configure option. Also in PHP 4, if you enable MySQL without specifying the path to the MySQL install DIR, PHP will use the bundled MySQL client libraries. In Windows, there is no DLL, it's simply built into PHP 4. Users who run other applications that use MySQL (for example, auth-mysql) should not use the bundled library, but rather specify the path to MySQL's install directory, like so: --with-mysql=/path/to/mysql. This will force PHP to use the client libraries installed by MySQL, thus avoiding any conflicts.

In PHP 5, MySQL is no longer enabled by default, nor is the MySQL library bundled with PHP. Read this FAQ for details on why.

This MySQL extension doesn't support full functionality of MySQL versions greater than 4.1.0. For that, use MySQLi.

If you would like to install the mysql extension along with the mysqli extension you have to use the same client library to avoid any conflicts.

Uyarı

Crashes and startup problems of PHP may be encountered when loading this extension in conjunction with the recode extension. See the recode extension for more information.

Not: If you need charsets other than latin (default), you have to install external (not bundled) libmysql with compiled charset support.

Runtime Configuration

The behaviour of these functions is affected by settings in php.ini.

Tablo 1. MySQL Configuration Options

NameDefaultChangeable
mysql.allow_persistent"On"PHP_INI_SYSTEM
mysql.max_persistent"-1"PHP_INI_SYSTEM
mysql.max_links"-1"PHP_INI_SYSTEM
mysql.default_portNULLPHP_INI_ALL
mysql.default_socketNULLPHP_INI_ALL
mysql.default_hostNULLPHP_INI_ALL
mysql.default_userNULLPHP_INI_ALL
mysql.default_passwordNULLPHP_INI_ALL
mysql.connect_timeout"0"PHP_INI_SYSTEM
For further details and definition of the PHP_INI_* constants see ini_set().

Here's a short explanation of the configuration directives.

mysql.allow_persistent boolean

Whether to allow persistent connections to MySQL.

mysql.max_persistent integer

The maximum number of persistent MySQL connections per process.

mysql.max_links integer

The maximum number of MySQL connections per process, including persistent connections.

mysql.default_port string

The default TCP port number to use when connecting to the database server if no other port is specified. If no default is specified, the port will be obtained from the MYSQL_TCP_PORT environment variable, the mysql-tcp entry in /etc/services or the compile-time MYSQL_PORT constant, in that order. Win32 will only use the MYSQL_PORT constant.

mysql.default_socket string

The default socket name to use when connecting to a local database server if no other socket name is specified.

mysql.default_host string

The default server host to use when connecting to the database server if no other host is specified. Doesn't apply in safe mode.

mysql.default_user string

The default user name to use when connecting to the database server if no other name is specified. Doesn't apply in safe mode.

mysql.default_password string

The default password to use when connecting to the database server if no other password is specified. Doesn't apply in safe mode.

mysql.connect_timeout integer

Connect timeout in seconds. On Linux this timeout is also used for waiting for the first answer from the server.

Resource Types

There are two resource types used in the MySQL module. The first one is the link identifier for a database connection, the second a resource which holds the result of a query.

Predefined Constants

The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.

Since PHP 4.3.0 it is possible to specify additional client flags for the mysql_connect() and mysql_pconnect() functions. The following constants are defined:

Tablo 2. MySQL client constants

ConstantDescription
MYSQL_CLIENT_COMPRESSUse compression protocol
MYSQL_CLIENT_IGNORE_SPACEAllow space after function names
MYSQL_CLIENT_INTERACTIVEAllow interactive_timeout seconds (instead of wait_timeout) of inactivity before closing the connection.

The function mysql_fetch_array() uses a constant for the different types of result arrays. The following constants are defined:

Tablo 3. MySQL fetch constants

ConstantDescription
MYSQL_ASSOC Columns are returned into the array having the fieldname as the array index.
MYSQL_BOTH Columns are returned into the array having both a numerical index and the fieldname as the array index.
MYSQL_NUM Columns are returned into the array having a numerical index to the fields. This index starts with 0, the first field in the result.

Examples

This simple example shows how to connect, execute a query, print resulting rows and disconnect from a MySQL database.

Örnek 1. MySQL extension overview example

<?php
/* Connecting, selecting database */
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
    or die(
"Could not connect : " . mysql_error());
echo
"Connected successfully";
mysql_select_db("my_database") or die("Could not select database");

/* Performing SQL query */
$query = "SELECT * FROM my_table";
$result = mysql_query($query) or die("Query failed : " . mysql_error());

/* Printing results in HTML */
echo "<table>\n";
while (
$line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo
"\t<tr>\n";
    foreach (
$line as $col_value) {
        echo
"\t\t<td>$col_value</td>\n";
    }
    echo
"\t</tr>\n";
}
echo
"</table>\n";

/* Free resultset */
mysql_free_result($result);

/* Closing connection */
mysql_close($link);
?>

İçindekiler
mysql_affected_rows -- Get number of affected rows in previous MySQL operation
mysql_change_user --  Change logged in user of the active connection
mysql_client_encoding -- Returns the name of the character set
mysql_close -- Close MySQL connection
mysql_connect -- Open a connection to a MySQL Server
mysql_create_db -- Create a MySQL database
mysql_data_seek -- Move internal result pointer
mysql_db_name -- Get result data
mysql_db_query -- Send a MySQL query
mysql_drop_db -- Drop (delete) a MySQL database
mysql_errno --  Returns the numerical value of the error message from previous MySQL operation
mysql_error --  Returns the text of the error message from previous MySQL operation
mysql_escape_string --  Escapes a string for use in a mysql_query.
mysql_fetch_array --  Fetch a result row as an associative array, a numeric array, or both.
mysql_fetch_assoc --  Fetch a result row as an associative array
mysql_fetch_field --  Get column information from a result and return as an object
mysql_fetch_lengths --  Get the length of each output in a result
mysql_fetch_object -- Fetch a result row as an object
mysql_fetch_row -- Get a result row as an enumerated array
mysql_field_flags --  Get the flags associated with the specified field in a result
mysql_field_len --  Returns the length of the specified field
mysql_field_name --  Get the name of the specified field in a result
mysql_field_seek --  Set result pointer to a specified field offset
mysql_field_table --  Get name of the table the specified field is in
mysql_field_type --  Get the type of the specified field in a result
mysql_free_result -- Free result memory
mysql_get_client_info -- Get MySQL client info
mysql_get_host_info -- Get MySQL host info
mysql_get_proto_info -- Get MySQL protocol info
mysql_get_server_info -- Get MySQL server info
mysql_info --  Get information about the most recent query
mysql_insert_id --  Get the ID generated from the previous INSERT operation
mysql_list_dbs --  List databases available on a MySQL server
mysql_list_fields -- List MySQL table fields
mysql_list_processes -- List MySQL processes
mysql_list_tables -- List tables in a MySQL database
mysql_num_fields -- Get number of fields in result
mysql_num_rows -- Get number of rows in result
mysql_pconnect --  Open a persistent connection to a MySQL server
mysql_ping -- Ping a server connection or reconnect if there is no connection
mysql_query -- Send a MySQL query
mysql_real_escape_string --  Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection.
mysql_result -- Get result data
mysql_select_db -- Select a MySQL database
mysql_stat -- Get current system status
mysql_tablename -- Get table name of field
mysql_thread_id -- Return the current thread ID
mysql_unbuffered_query --  Send an SQL query to MySQL, without fetching and buffering the result rows


mysql_affected_rows> <msql
Last updated: Sat, 17 Jul 2004
 
add a note add a note User Contributed Notes
MySQL Functions
joachimb at gmail dot com
16-May-2008 02:28
Lazy Man's Logging:

<?php
 
/// Creates a table called $table as (id, when, message) if none such exists, and inserts a row with $message in it.
  /// If no connection details are given, it uses the current database connection. Same goes for $database and $when.
  ///
  /// @returns TRUE on success or FALSE on failure.
  ///
  /// @example mysql_put_contents("orders", "I CAN HAZ CHEEZBURGER?", "mysite", NULL, "127.0.0.1:3306", "mysite_user", "secret") or die(mysql_error());
  /// @example mysql_put_contents("guestbook", "Longcat says: I'm loooooooooooong") or die("Errorz!");
 
function mysql_put_contents($table, $message, $database = NULL, $when = NULL, $host = NULL, $user = NULL, $pass = NULL) {
    if(
$host)
       
mysql_connect($host, $user, $pass);
      if(
$database)
       
mysql_select_db($database);
   
     
$qry = "CREATE TABLE IF NOT EXISTS `$table` (
             `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
             `when` TIMESTAMP DEFAULT NOW(),
             `message` TEXT NOT NULL
           );"
;
   
$result = mysql_query($qry);
    if(
$result === FALSE)
      return
FALSE;
     
   
$qry = "INSERT INTO `$table` VALUES(NULL, ".($when ? $when : 'NULL').", '".mysql_real_escape_string($message)."');";

   
$result = mysql_query($qry);
    if(
$result === FALSE)
      return
FALSE;
     
    return
TRUE;
  }
   
?>
dhirendrak at yahoo dot com
04-Feb-2008 11:03
<?php
# Created by dhirendra can be reached at dhirendrak at yahoo dot com
# This script is created to check the data difference between two tables
# when the structure of both tables are same.
# Limitation :
# 1) Structure of both tables should be same.
# 2) Name of both table should be different but if same than obviously
# second table should be if different database.
# 3) If use two database than both database permission should be same
# as i am using aliases to get the information.
#
# USES::
# 1) This may be useful when you did some changes in your existing
# script and you expect the certain output. So with the help of this
#    function you may compare the impact due to your changes in script.
#


$host="";        # host name or ip address
$user="";            # database user name
$pass="";    # database password
$database="";        # dateabase name with which you want to connect

# get connection with mysql
$dblink = @mysql_connect($host,$user,$pass);

# select and open database
mysql_select_db($database,$dblink);

$db1="< your db1 >"; // first database
// second database if database are same for both tables than use the same as db1
$db2="< your db2 >";
$table1="< your table1 >"; // first table
// second table if database is same for both tables than table name
# must be different but fields name are same and order of the fields are same.

$table2="< your table2 >";

// function starts here
function table_data_difference($first,$second)
{
    global
$dblink;
   
$sql1 = "SHOW FIELDS FROM $first";
   
$result = mysql_query($sql1,$dblink) or die("Having error in execution 1 ==".mysql_error());

    while(
$row = mysql_fetch_object($result))
    {
       
$from_fields[]=$row->Field;
    }
   
   
$sql="select * from $first";
   
$res=mysql_query($sql,$dblink) or die("Having error in execution 2==".mysql_error());
   
$j=1;
    while(
$row=mysql_fetch_array($res))
    {
       
       
$num=count($from_fields);

       
$sql_next="select $second.* from $second where";
   
        for(
$i=0;$i < $num;$i++)
        {
           
$sql_next=$sql_next." ".$second.".".$from_fields[$i]."='".$row[$from_fields[$i]]."' and ";
        }

       
$sql_next=substr($sql_next,0,strlen($sql_next)-5);

       
$res_next=mysql_query($sql_next,$dblink) or die("Having error in execution 3==".mysql_error());
       
$num1=mysql_num_rows($res_next);
        if(
$num1==0)
        {
            for(
$i=0;$i < count($from_fields);$i++)
            {
               
$val=$val."<br>".$from_fields[$i]."=".$row[$from_fields[$i]];
            }
           
// Display the record which are not matched.
           
echo "<br>\n".$j.".".$val;
            echo
"<br>-----------------------------------------------------";
           
$j++;
        }
   
    }
   
}

$first=$db1.'.'.$table1;
$second=$db2.'.'.$table2;

table_data_difference($first,$second);

?>
matiyahoo-publico at yhoo dot com dot ar
17-Nov-2007 08:26
David:

In this line:

$query = "SELECT username FROM users WHERE username REGEXP '$username[0-9*]'";

PHP may read $username[, *including* the open square bracket, and may think you are trying to get into an array.

You should use this instead:

$query = "SELECT username FROM users WHERE username REGEXP '${username}[0-9*]'";

Or maybe this:

$query = "SELECT username FROM users WHERE username REGEXP '$username" . "[0-9*]'";
david at kiwi dot com
09-Nov-2007 08:13
I am wanting to increment usernames which are to be alphabetic characters A-Z or a-z and if someone uses "abc" it will automatically be given "abc1" and the next applicant to apply for that same username will automatically be given "abc2", the next "abc3" and so on. If I enter the following into MySQL;

SELECT username FROM users WHERE username REGEXP 'abc[0-9*]';

the result is

abc1
abc2
abc3

I have been given the following script from another forum but it does not work;

<?php
$username
= 'abc';
$query = "SELECT username FROM users WHERE username LIKE '$username%'";
$res = mysql_query($query);
while(
$row = mysql_fetch_assoc($res)) {
  
$n = str_replace($username, '', $row['username']);
   if (
$old_n+1!=$n) {
     
$new_user = $username . ($old_n+1);
      break;
   }
}
?>

In addition to the script not working the "LIKE" function would not be suitable because if a username was applied as "blue" it would pick up usernames "blue1" and "bluebird1" therefore it appears as if "REGEXP '$username[0-9*]' is the only or correct option.

I have tried the REGEXP option in association with the balance of the code but it appears as if PHP will not interact with the "[" and "]" in the following;

$query = "SELECT username FROM users WHERE username REGEXP '$username[0-9*]'";
SID TRIVEDI
07-Nov-2007 04:33
<?php
/*
MySQL (Community) Server Installation on 32-bit Windows XP running Apache

On Windows, the recommended way to run MySQL is to install it as a Windows service, whereby MySQL starts and stops automatically when Windows starts and stops. A MySQL server installed as a service can also be controlled from the command line commands, or with the graphical Services utility like phpMyAdmin.

PHP ---> MySQL CONNECTORS (php_mysql.dll and php_mysqli.dll as extensions)
MySQL provides the mysql and mysqli extensions for the Windows operating system on http://dev.mysql.com/downloads/connector/php/ for MySQL version 4.1.16 and higher, MySQL 5.0.18, and MySQL 5.1. As with enabling any PHP extension in php.ini (such as php_mysql.dll), the PHP directive extension_dir should be set to the directory where the PHP extensions are located.

MySQL is no longer enabled by default, so the php_mysql.dll DLL must be enabled inside of php.ini. Also, PHP needs access to the MySQL client library. A file named libmysql.dll is included in the Windows PHP distribution and in order for PHP to talk to MySQL this file needs to be available to the Windows systems PATH.

Following PHP Script is useful to test PHP connection with MySQL.
*/

//$connect = mysql_connect("Your Host Name", "MySQL root directory", 'MySQL password, if any');
//$connect = mysql_connect("Host Name or Address - 127.0.0.1", "root", 'password');
$connect = mysql_connect("localhost", "root", 'password');
if (
$connect){
echo
"Congratulations!\n<br>";
echo
"Successfully connected to MySQL database server.\n<br>";
}else{
$error = mysql_error();
echo
"Could not connect to the database. Error = $error.\n<br>";
exit();
}

// Closing connection
$close = mysql_close($connect);
if (
$close){
echo
"\n<br>";
echo
"Now closing the connection...\n<br>";
echo
"MySQL connection closed successfully as well.\n<br>";
}else{
echo
"There's a problem in closing MySQL connection.\n<br>";
}
exit();
?>
rad14701 at yahoo dot com
14-Oct-2007 12:01
@Amanda 12-Oct-2007 09:58

I almost had to ask myself if this was a real question... If the MySQL server rejects the connection attempt then, yes, MySQL would be able to send back an error to PHP... And if PHP can't access the target MySQL server at all then it is also smart enough to issue the appropriate error all by itself...
arnold_dba
13-Oct-2007 06:36
Also, to secure MySQL data and to be able to comply with PCI standards, you should encrypt the data. There are many ways to do it. For hackers, you can use dm-crypt (www.saout.de/misc/dm-crypt) tool. It is basically used to encrypt the whole partition. If you want a sophisticated solution go with Security-GENERAL for MySQL from packet general (www.packetgeneral.com)
On windows, you can use disk encryption feature provided by windows itself or tool like trucrypt (www.truecrypt.org)
DuiMDog
02-Sep-2007 03:19
On 11-Apr-2007 admin at mihalism dot com posted an 'easy to use MySql-class'.
In my opinion there is a bug in the get_affected_rows-function. It refers to query-id, but  it should refer to connect-id instead.

The corrected function should be:
    function get_affected_rows($connect_id = ""){
            if($connect_id == NULL){
                $return = mysql_affected_rows($this->connect_id);
            }else{
                $return = mysql_affected_rows($connect_id);
            }
            if(!$return){
                $this->error();
            }else{
                return $return;
            }
        }
atk2 at hotmail dot com
14-Jun-2007 08:56
After finally getting IIS, PHP, and MySQL on a new Windows XP machine, I decided to write the steps I took so you can see how it was done: http://www.atksolutions.com/articles/install_php_mysql_iis.html

Hope this helps.
tomasz dot rup at gmail dot com
16-Apr-2007 04:14
Correct algorithm to generate MySQL password hash is:

<?php
function mysql_password($passStr) {
       
$nr=0x50305735;
       
$nr2=0x12345671;
       
$add=7;
       
$charArr = preg_split("//", $passStr);

        foreach (
$charArr as $char) {
                if ((
$char == '') || ($char == ' ') || ($char == '\t')) continue;
               
$charVal = ord($char);
               
$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
               
$nr &= 0x7fffffff;
               
$nr2 += ($nr2 << 8) ^ $nr;
               
$nr2 &= 0x7fffffff;
               
$add += $charVal;
        }

        return
sprintf("%08x%08x", $nr, $nr2);
}
?>
Nobody Special
14-Apr-2007 11:20
This PHP5-only class is used so that $db isn't passed. Kudos to arjen at queek dot nl for example.

<?php
class SQL {
 private
$db;
 public function
__construct($host="localhost",$user="root",$pass="",$db="") {
 
$this->db = @mysql_connect($host, $user, $pass);
  if(!
$this->db) die(@mysql_error());
  if(
$db != "") $dbs = @mysql_select_db($db);
  if(!
$dbs) die(@mysql_error());
 }
 public function
__destruct() {
  @
mysql_close($db);
 }
 public function
__call($function, $arguments) {
 
array_push($arguments, $this->db);
 
$return = call_user_func_array("mysql_".$function, $arguments);
  if(!
$return) die(@mysql_error());
 }
}

$db = new SQL();
$query = $db->query("SELECT * FROM this_table WHERE my_variable='1'");
$fetch = $db->fetch_array($query);
print_r($fetch);
?>
mega-squall at caramail dot com
13-Apr-2007 02:35
For Windows users, please note:

If apache is installed as a service, and you change PATH variable so it can reach libmysql.dll, you will need to reboot your machine in order to have changes applied.
admin at mihalism dot com
11-Apr-2007 07:48
Heres a easy to use MySQL class for any website

<?php
   
class mysql_db{
       
//+======================================================+
       
function sql_connect($sqlserver, $sqluser, $sqlpassword, $database){
           
$this->connect_id = mysql_connect($sqlserver, $sqluser, $sqlpassword);
            if(
$this->connect_id){
                if (
mysql_select_db($database)){
                    return
$this->connect_id;
                }else{
                    return
$this->error();
                }
            }else{
                return
$this->error();
            }
        }
       
//+======================================================+
       
function error(){
            if(
mysql_error() != ''){
                echo
'<b>MySQL Error</b>: '.mysql_error().'<br/>';
            }
        }
       
//+======================================================+
       
function query($query){
            if (
$query != NULL){
               
$this->query_result = mysql_query($query, $this->connect_id);
                if(!
$this->query_result){
                    return
$this->error();
                }else{
                    return
$this->query_result;
                }
            }else{
                return
'<b>MySQL Error</b>: Empty Query!';
            }
        }
       
//+======================================================+
       
function get_num_rows($query_id = ""){
            if(
$query_id == NULL){
               
$return = mysql_num_rows($this->query_result);
            }else{
               
$return = mysql_num_rows($query_id);
            }
            if(!
$return){
               
$this->error();
            }else{
                return
$return;
            }
        }
       
//+======================================================+
       
function fetch_row($query_id = ""){
            if(
$query_id == NULL){
               
$return = mysql_fetch_array($this->query_result);
            }else{
               
$return = mysql_fetch_array($query_id);
            }
            if(!
$return){
               
$this->error();
            }else{
                return
$return;
            }
        }   
       
//+======================================================+
       
function get_affected_rows($query_id = ""){
            if(
$query_id == NULL){
               
$return = mysql_affected_rows($this->query_result);
            }else{
               
$return = mysql_affected_rows($query_id);
            }
            if(!
$return){
               
$this->error();
            }else{
                return
$return;
            }
        }
       
//+======================================================+
       
function sql_close(){
            if(
$this->connect_id){
                return
mysql_close($this->connect_id);
            }
        }
       
//+======================================================+   
   
}

   
/* Example */

   
$DB = new mysql_db();
   
$DB->sql_connect('sql_host', 'sql_user', 'sql_password', 'sql_database_name');
   
$DB->query("SELECT * FROM `members`");
   
$DB->sql_close();
?>
26-Jan-2007 01:14
Note, that the sql.safe_mode configuration setting does effect all mysql_* functions. This has nothing to to with the php safe mode, check the [SQL] section in php.ini.

I found out, that if you set sql.safe_mode = On, mysql_connect will ignore provided username and passwort and makes use of the script owner instead (checked on debian).
ravenal at uniphix dot com
27-Nov-2006 02:37
I was working with a friend of mine and he happened wanted to sort data based on the column names, well this function will basically sort the Field Names in ABC order and then from there on it'll add the data based on the field names assigned to...

You can use this to create easily forms and exclude what you don't want to be as entered data or sort it based on what order you want...

<?php
/*
 * By Benjamin Willard (c) 2006
 *
 * Sorts a Field by the Column Name (in ABC Order)
 *
 * @param string             : Table Name of where to Display the Values
 * @param integer             : Database Link
 * (Optional) @param array     : This will sort whatever you wish to be displayed on the top of the list
 * (Optional) @param array     : This will exclude what you do not want displayed
 *
 * return @param array         : Returns an Array of the Column Data
 * [Usage]
 * mysql_sort_field_column( string tablename, int database_link [, array sortfirst, array exclude] )
 * [Example]
 * $array = mysql_sort_field_column( "test", $c, array( "id", "name" ), array( "password" ) );
 *
 * [Output]
 *    Array
 *    (
 *        [0] => id
 *        [Field] => id
 *        [1] => int(11)
 *        [Type] => int(11)
 *        [2] =>
 *        [Null] =>
 *        [3] => PRI
 *        [Key] => PRI
 *        [4] =>
 *        [Default] =>
 *        [5] => auto_increment
 *        [Extra] => auto_increment
 *    )
 *        [id] => 1;
 *
 */
function mysql_sort_field_column( $tablename, $link, $sortfirst = '', $exclude = '' )
{       
   
$show=mysql_query("SHOW COLUMNS FROM $tablename", $link);
   
   
$array=array();
   
    while(
$fetch = mysql_fetch_array($show ) )
    {
       
$array[$fetch['Field']] = $fetch;
    }
   
   
ksort($array);
   
    if(
$sortfirst )
    {
        if(
is_array($sortfirst) )
        {
           
$newarray = array();
            foreach(
$sortfirst AS $i2 => $v )
               
$newarray[$v] = $array[$v];
           
            foreach(
$array AS $index => $val2 )
            {
                if(
in_array($index, $sortfirst ) )
                    continue;
                   
               
$newarray[$index] = $val2;
            }
           
           
$array = $newarray;
        }
    }
   
    if(
$exclude )
    {
        if(
is_array($exclude) )
        {
           
$out = array();
           
            foreach(
$array AS $index2 => $val2 )
            {
                if(
in_array( $index2, $exclude ) )
                    continue;
                   
               
$out[$index2] = $val2;
            }
           
           
$array = $out;
        }
    }
   
    return
$array;
}
?>
mdhafen at x.washk12.org
19-Oct-2006 11:00
In response to martijn at elicit dot nl

Actually it is possible as a query, even with an auto_increment key field.  Like so...

INSERT
  INTO
   tablename
   ( list, of, ALL, similar, columns )
( SELECT
  *
FROM
  tablename
WHERE
  somefield = 'somevalue' )

That should work.
martijn at elicit dot nl
29-Aug-2006 12:52
Keeping history records usually requires you to duplicate rows. With standard MySQL syntax you can create a query like this:

INSERT
  INTO
    tablename
SELECT
  *
FROM
  tablename
WHERE
  somefield = 'somevalue'

The problem is that this won't work if you are using an auto_numbering key id field. There is no way to do this with standard MySQL syntax and I haven't been able to find a standard php function as well. So here's the function I wrote for that very purpose:

<?php

// function to create a duplicate record in a table with 1 auto_increment id.
function mysql_duplicate_record($table, $id_field, $id)
{
   
// load original record into array
   
$query = 'SELECT * FROM ' . $table . ' WHERE ' . $id_field . ' = ' . $id . ' LIMIT 1;';
   
$r = mysql_query( $query ) or die('Error, query failed. ' . mysql_error());
   
$ar = mysql_fetch_array( $r, MYSQL_ASSOC );
   
   
// insert new record and get new auto_increment id
   
mysql_query ('LOCK TABLES ' . $table . ' WRITE;') or die('Error, query failed. ' . mysql_error());
   
mysql_query ('INSERT INTO ' . $table . ' ( `' . $id_field . '` ) VALUES ( NULL );') or die('Error, query failed. ' . mysql_error());
   
$id = mysql_insert_id();
   
mysql_query ('UNLOCK TABLES;') or die('Error, query failed. ' . mysql_error());
   
   
// update new record with values from previous record
   
$query = 'UPDATE ' . $table . ' SET ';
    while (
$value = current($ar))
    {
        if (
key($ar) != $id_field)
        {
           
$query .= '`'.key($ar).'` = "'.$value.'", ';
        }
       
next($ar);
    }
   
$query = substr($query,0,strlen($query)-2).' ';
   
$query .= 'WHERE ' . $id_field . ' = "' . $id . '" LIMIT 1;';
   
mysql_query($query) or die('Error, query failed. ' . mysql_error());
   
   
// return the new id
   
return $id;
}

?>
davesteinb at yahoo dot com
13-Aug-2006 03:32
I made this function to reduce DB calls. You can store Mysql results in a session var and sort the results on any column. Might work nice in an AJAX app.

<?

function mysql_sort($results, $sort_field, $dir="ASC") {
    $temp_array = array();
    $i=0;
    foreach ($results as $res) {
        $temp_array[$i] = $res[$sort_field];
        $i++;
    }
    if ($dir=="ASC") {
        asort($temp_array);
    } else {
        arsort($temp_array);
    }

    $new_results = array();
    $i=0;
    foreach($temp_array as $k => $v) {
        $new_results[$i] = $results[$k];
        $i++;
    }
    ksort($new_results);
    return $new_results;
   
}

//use
if (count($_SESSION["res"])==0) {
    $_SESSION["res"] = [GET DATABASE RESULTS HOWEVER YOU MAY]
}

$_SESSION["res"] = mysql_sort($_SESSION["res"], $_REQUEST["sort"], $_REQUEST["dir"]);

?>
<table>
<tr>
  <td><a href="page.php?sort=f_name&dir=<? echo ($_REQUEST["dir"]=="ASC") ? "DESC":"ASC"; ?>">First</a></td>
  <td><a href="page.php?sort=l_name&dir=<? echo ($_REQUEST["dir"]=="ASC") ? "DESC":"ASC"; ?>">Last</a></td>
</tr>

<? foreach ($_SESSION["res"] as $r) {?>
<tr>
  <td><?=$r["f_name"]?></td>
  <td><?=$r["l_name"]?></td>
</tr>
<? } ?>
</table>
richard at NOSPAM dot dimax dot com
19-Jul-2006 04:58
In response to Conrad Decker's post below: 

If your tables contain foreign key constraints you will not be able to properly restore from a datafile created by mysqldump.

mysqldump dumps table data in alphabetical order, not in the logical order required by the foreign key constraints.
vbolshov at rbc dot ru
09-Jul-2006 11:27
I have recently ran into a problem with configuring php extensions related to mysql (namely, mysql and pdo_mysql). Later I've discovered that it wasn't a PHP problem but that of MySQL - libmysqlclient doesn't ship with binary downloads. I've built MySQL from sources and both extensions then compiled successfully.
Conrad Decker
23-May-2006 01:56
In regards to the previous post...you should actually be able to pipe a mysql dump directly back into mysql.

From the command line something like
mysql -u username -p databasename < mysqldumpfilename
should rebuild the database.

There are some additional options one can use, and I believe mysqldump from different versions of mysql may not be completely compatible.
sb at stephenbrooks dot org
01-May-2006 01:43
I'm in the process of changing web hosts and my previous host provided a "dump" of the database in the form of a sequence of SQL requests that (I assume) have to be executed in order to rebuild the database on another system.  It was generated using "MySQL dump 9.11".  Queries are finished by a semicolon and linefeed, while comment-lines begin with a double hyphen.  The script below opens a connection to an SQL server and loads a dump file $file of this format into the database $dest_db.

function load_db_dump($file,$sqlserver,$user,$pass,$dest_db)
{
  $sql=mysql_connect($sqlserver,$user,$pass);
  mysql_select_db($dest_db);
  $a=file($file);
  foreach ($a as $n => $l) if (substr($l,0,2)=='--') unset($a[$n]);
  $a=explode(";\n",implode("\n",$a));
  unset($a[count($a)-1]);
  foreach ($a as $q) if ($q)
    if (!mysql_query($q)) {echo "Fail on '$q'"; mysql_close($sql); return 0;}
  mysql_close($sql);
  return 1;
}

This may not be watertight if the ";\n" sequence appears inside queries, but I hope it helps others who are in posession of such dumps.
caladorn at ugcs dot caltech dot edu
19-Apr-2006 12:33
After configuring php.ini as outlined above (set the extension_dir variable and uncomment the appropriate mysql library) I kept receiving the following error on every Apache restart:

PHP Startup: Unable to load dynamic library './ext\\php_mysql.dll'

After trawling the web, most suggestions seemed to center on copying the libmysql.dll from the php install directory to c:\windows\system32.  While this can work, it can also complicate future upgrades, since you'll always have to copy the new libmysql.dll to insure proper operation.

Instead, if you run a search for "libmysql.dll", you'll likely find several versions in various directories.  After removing the older (smaller) versions from the other directories in my PATH, (c:\windows, c:\windows\system32) - and making sure the php install directory was in the PATH, apache/php was able to successfully locate the correct DLL and start without errors.

Hopefully someone will find this helpful.  ;)
Nathan Brizzee
03-Apr-2006 10:42
Hi,
For all those who may still be struggling to get PHP to work with Windows and IIS, I finally found something that works.

If you are getting the error message that function mysql_connect could not be found and you're sure you enabled php_mysql in php.ini this is what finally solved my problem.

The post from mmw_canada at yahoo dot com on 10-Jul-2005 06:15 pointed me in the right direction.  Thanks mmw_canada!

1.) If you are connected to your Windows box via Remote Desktop, there is a switch to Remote Desktop that will connect you to the console session.  This is important because when IIS starts up, it's error messages go to the console.  If you are sitting at the physical machine, you can ignore this step.

Here is the command
mstsc -v:10.192.186.xxx  /F -console

For a more complete list of supported commands, type this at a dos command window:
mstsc /?

2.) Add a registry entry that tells PHP where to find its php.ini file.  Copy the following text and paste it in a text file.  Rename the text file to something like phpini.reg and double-click it to add it to your registry.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\\SOFTWARE\\PHP]
"IniFilePath"="C:\\\\PHP"

2.) Add c:\\php; (or wherever you unzipped PHP to) to your environment variable "Path".  Here is the important part that caused me hours and hours of grief.  When adding c:\\php; to the PATH environment variable, make SURE you add it BEFORE the path to CVSNT or MYSQL.  PHP, CVSNT, and MYSQL all have a file called libmysql.dll.  Search order is important for PHP to find its file libmysql.dll first.  PHP must come first in the search path.  Otherwise you will get an error from the DLL on the console screen when IIS starts up saying it can't find the specified function call.

To see the order of your environment variables, open up a dos window and type "set" and press enter.  Look at what Path is equal to.  c:\\php; better come before cvsnt and mysql or it will never work properly.

Hope this helps!
brjann at gmail dot com
01-Apr-2006 01:11
After tearing my eyes out in frustration, I've finally found a way to enable extensions that always works for me. It's pretty straightforward.

1. Download the latest zip-version of PHP.
2. Delete (or backup) the contents of your PHP folder (usually c:\php). (remember to save any ext's not included in the zip)
3. Copy everything in the zip-file into your PHP folder
4. Be sure that extension_dir is set to "./ext" in php.ini
5. Enable whichever extensions you want to use in php.ini

I guess that deleting everything is quite unnecessary, the important thing is that the php.exe and extensions in the same zip are of compatible versions. I've never found any need to change the PATH environment variable.

Hope it helps!
yp
15-Mar-2006 02:08
when using Fedora Core linux Mysql rpm installation.
Configure as following to load the mysql header files.
./configure --with-mysql=/usr/
Remember to do make clean to remove old configurations before compile
php comments of fuzzyworm co., uk
17-Feb-2006 03:13
If you want to get PHP working nicely with MySQL, even with Apache, under Windows based systems, try XAMPP, from Apache Friends. It saves messing about with config files, which is the only major problem with trying to get the three to work together under windows.

http://www.apachefriends.org/en/xampp-windows.html
sabin at sabin dot com dot np
14-Feb-2006 04:29
php_mysql.dll and libmysql.dll for windows systems can be downloaded from http://dev.mysql.com/downloads/connector/php/

It can be useful to those who are using the PHP Windows installer, which does not have any external extensions included.
elliotthird at tiscali dot co dot uk
03-Feb-2006 09:20
Oops! Don't use that one, use this:
<?php
 
class database {
   function
database($server, $username, $password, $database) {
    
$this->connection = mysql_connect($server, $username, $password);
     if (!
$this->connection || !mysql_select_db($database, $this->connection)) {
       return
false;
     } else {
       return
true;
     }
   }
   function
query($sql, $type = MYSQL_BOTH) {
    
$query = mysql_query($sql, $this->connection);
     while (
$row = mysql_fetch_row($query)) {
      
$return[] = $row;
     }
     return
$return;
   }
  }
 
/* Change this to reflect your database setup */
 
$database = new database('localhost', 'root', '', 'forum');
  if (!
$database) {
    exit(
'Could not connect to the database!');
  }
?>
jeremy hepler
20-Dec-2005 12:12
For those of you on an OS that has older mysql libs and want to properly authenticate to the modern mysql versions, without the OLD_PASSWORD hack; compile php with where you have installed the latest mysql binary package:

./configure --with-mysql=/usr/local/mysql

if you have mysql installed on seperate server, just drop it into the target directory on what ever machine you are compiling it on.

Be sure to "make clean" before building or it may look in the previous place.

Use the output of mysql_get_client_info(); to test before and after.
Joe Greklek
15-Dec-2005 01:15
I've seen alot of newbies getting frustrated over the extenstions not being installed initially, so heres a quick tut for Windows.

It's ok to use the php5 installer. Just be sure to also grab the .zip or "manual" version of php5.

Install it like any other app. It's pretty straight forward. Don't forget to set the securities mentioned in the last message box at the end of the install. Next, If you installed php to c:\php then you will need to add this to your PATH environment variable. This is a very important step.

Now open up the .zip manual version of php5 and extract the ext folder, and "libmysql.dll" to "c:\php\".

You *MUST* set your security permissions on libmysql.dll and the ext folder to READ/READ&EXECUTE for IUSR_"MACHINE_NAME". like my machine is called master<acct = IUSR_MASTER>. If you don't do this you will recieve an ******.dll - Access Denied. type message.

Next edit your php.ini file usually located in c:\windows\.
Find the line for    extension_dir    variable and make it say
extension_dir = "c:\php\ext\"

Then scroll down a little bit and find the lines that say
;extension=php_mbstring.dll
;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_exif.dll
;extension=php_fdf.dll
;extension=php_filepro.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_ifx.dll

just remove the semicolin for each extension you would like loaded. Such as
extention=php_mysql.dll
and so on.

Now just reboot and all should be well. Query away. you basically only need to reboot to update the PATH environment variable. Hope this helps at least 1 person.:)
phil at pelanne dot com
03-Nov-2005 07:46
If you are experiencing extremely slow connections to MySQL from PHP from a Windows 2003 Server it may well not be PHP or IIS - try loading mysql in in 'skip-name-resolve'-Mode. 

It may mean the difference between a 10 second load time and a split second load time.
Jonathon Hibbard
21-Sep-2005 10:47
This is a small function I wrote to handle queries on a table.
It can query a table, order and sort, and supports inner joins.

This function also returns the result as a single row or all rows.

Enjoy :

<?php
 
/**
   * Selects Fields from a database/table. 
   * Also supports INNER JOINS, GROUP BY, ORDER BY.
   *
   * @Author : Jonathon Hibbard
   *
   * @param string $db_name         //Name of Database
   * @param string $table           //Name of Table
   * @param array $fields           //Field Names we want to select
   * @param array $inner            //Fields to be INNER JOINED
   * @param array $where            //WHERE fields.
   * @param string $group_by        //Field to group by.
   * @param string $order_by        //Field to order by
   * @param string $asc             //Asc or Desc order
   * @param string $return_array    //Defines $rst as an array or single row
   * @return $rst                   //Returns the result
   *
   * @example : (1) getFields('mytool','master',
   *                          'array('master.master_id','master.fname_id'));
   *            (2) getFields('mytool','master',
   *                          'array('master.master_id','master.fname_id',
   *                          'fname.fname'), array(0=>array('mytool',
   *                          'fname','master','fname_id',)),
   *                          'master.default_value <> "", false);
   *            (3) getFields('mytool','master','master.master_id',NULL,
   *                          'master.fname_id = "3",NULL,NULL,NULL,false);
   */
 
function getFields($db_name=NULL,$table=NULL,$fields=NULL,$inner=NULL,
                    
$where=NULL,$group_by=NULL,$order_by=NULL,$asc=NULL,
                    
$return_array=true) {
   
$C_NAME = __CLASS__."::".__FUNCTION__;
   
$sql = "SELECT ";
   
is_array($fields) ? $sql .= implode(',',$fields) : $sql .= $fields;
   
$sql .= " FROM ".$db_name.".".$table;
    if(!empty(
$inner)) {
     
$total_inners = count($inner);
      for(
$i=0; $i<$total_inners; $i++)
       
$sql .= " INNER JOIN ".$inner[$i][0].".".$inner[$i][1]."
                  ON "
.$inner[$i][1].".".$inner[$i][2]." =
                     "
.$inner[$i][3].".".$inner[$i][2