Support Joomla!
Main
News
Help
Forum
Extensions
Shop
Developers
Joomla! 1.5 Documentation
Home
API reference wiki
SVN repository
Packages
Select a package...
Unknown
Archive
com-tecnick-tcpdf
geshi
Joomla
Joomla-Framework
OpenID
patError
patTemplate
PEAR
phpGACL
PHPMailer
PHP_Compat
SimplePie
utf8
Yadis
Package: Joomla-Framework
Other documents
Changelog
Element index (all)
Error log
Install
Copyright
License
License
Content on this site is copyright © 2005 - 2008 by the individual contributors and can be used in accordance with the
Creative Commons License, Attribution- NonCommercial- ShareAlike 2.5
. Some parts of this website may be subject to other licenses.
Source code for file /joomla/database/database/mysql.php
Documentation is available at
mysql.php
<?php
/**
*
@version
$Id: mysql.php 9870 2008-01-05 10:56:58Z eddieajau $
*
@package
Joomla.Framework
*
@subpackage
Database
*
@copyright
Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
*
@license
GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/
// Check to ensure this file is within the rest of the framework
defined
(
'JPATH_BASE'
)
or
die
(
)
;
/**
* MySQL database driver
*
*
@package
Joomla.Framework
*
@subpackage
Database
*
@since
1.0
*/
class
JDatabaseMySQL
extends
JDatabase
{
/**
* The database driver name
*
*
@var
string
*/
var
$name
=
'mysql'
;
/**
* The null/zero date string
*
*
@var
string
*/
var
$_nullDate
=
'0000-00-00 00:00:00'
;
/**
* Quote for named objects
*
*
@var
string
*/
var
$_nameQuote
=
'`'
;
/**
* Database object constructor
*
*
@access
public
*
@param
array
List of options used to configure the connection
*
@since
1.5
*
@see
JDatabase
*/
function
__construct
(
$options
)
{
$host
=
array_key_exists
(
'host'
,
$options
)
?
$options
[
'host'
]
:
'localhost'
;
$user
=
array_key_exists
(
'user'
,
$options
)
?
$options
[
'user'
]
:
''
;
$password
=
array_key_exists
(
'password'
,
$options
)
?
$options
[
'password'
]
:
''
;
$database
=
array_key_exists
(
'database'
,
$options
)
?
$options
[
'database'
]
:
''
;
$prefix
=
array_key_exists
(
'prefix'
,
$options
)
?
$options
[
'prefix'
]
:
'jos_'
;
$select
=
array_key_exists
(
'select'
,
$options
)
?
$options
[
'select'
]
:
true
;
// perform a number of fatality checks, then return gracefully
if
(
!
function_exists
(
'mysql_connect'
))
{
$this
->
_errorNum
=
1
;
$this
->
_errorMsg
=
'The MySQL adapter "mysql" is not available.'
;
return
;
}
// connect to the server
if
(
!
(
$this
->
_resource
=
@
mysql_connect
(
$host
,
$user
,
$password
,
true
)))
{
$this
->
_errorNum
=
2
;
$this
->
_errorMsg
=
'Could not connect to MySQL'
;
return
;
}
// finalize initialization
parent
::
__construct
(
$options
)
;
// select the database
if
(
$select
)
{
$this
->
select
(
$database
)
;
}
}
/**
* Database object destructor
*
*
@return
boolean
*
@since
1.5
*/
function
__destruct
(
)
{
$return
=
false
;
if
(
is_resource
(
$this
->
_resource
))
{
$return
=
mysql_close
(
$this
->
_resource
)
;
}
return
$return
;
}
/**
* Test to see if the MySQL connector is available
*
*
@static
*
@access
public
*
@return
boolean
True on success, false otherwise.
*/
function
test
(
)
{
return
(
function_exists
(
'mysql_connect'
))
;
}
/**
* Determines if the connection to the server is active.
*
*
@access
public
*
@return
boolean
*
@since
1.5
*/
function
connected
(
)
{
if
(
is_resource
(
$this
->
_resource
))
{
return
mysql_ping
(
$this
->
_resource
)
;
}
return
false
;
}
/**
* Select a database for use
*
*
@access
public
*
@param
string
$database
*
@return
boolean
True if the database has been successfully selected
*
@since
1.5
*/
function
select
(
$database
)
{
if
(
!
$database
)
{
return
false
;
}
if
(
!
mysql_select_db
(
$database
,
$this
->
_resource
))
{
$this
->
_errorNum
=
3
;
$this
->
_errorMsg
=
'Could not connect to database'
;
return
false
;
}
// if running mysql 5, set sql-mode to mysql40 - thereby circumventing strict mode problems
if
(
strpos
(
$this
->
getVersion
(
)
,
'5'
)
===
0
)
{
$this
->
setQuery
(
"SET sql_mode = 'MYSQL40'"
)
;
$this
->
query
(
)
;
}
return
true
;
}
/**
* Determines UTF support
*
*
@access
public
*
@return
boolean
True - UTF is supported
*/
function
hasUTF
(
)
{
$verParts
=
explode
(
'.'
,
$this
->
getVersion
(
) )
;
return
(
$verParts
[
0
]
==
5
||
(
$verParts
[
0
]
==
4
&&
$verParts
[
1
]
==
1
&& (int)
$verParts
[
2
]
>=
2
))
;
}
/**
* Custom settings for UTF support
*
*
@access
public
*/
function
setUTF
(
)
{
mysql_query
(
"SET NAMES 'utf8'"
,
$this
->
_resource
)
;
}
/**
* Get a database escaped string
*
*
@param
string
The string to be escaped
*
@param
boolean
Optional parameter to provide extra escaping
*
@return
string
*
@access
public
*
@abstract
*/
function
getEscaped
(
$text
,
$extra
=
false
)
{
$result
=
mysql_real_escape_string
(
$text
,
$this
->
_resource
)
;
if
(
$extra
)
{
$result
=
addcslashes
(
$result
,
'%_'
)
;
}
return
$result
;
}
/**
* Execute the query
*
*
@access
public
*
@return
mixed
A database resource if successful, FALSE if not.
*/
function
query
(
)
{
if
(
!
is_resource
(
$this
->
_resource
))
{
return
false
;
}
if
(
$this
->
_limit
>
0
||
$this
->
_offset
>
0
)
{
$this
->
_sql
.=
' LIMIT '
.
$this
->
_offset
.
', '
.
$this
->
_limit
;
}
if
(
$this
->
_debug
)
{
$this
->
_ticker
++
;
$this
->
_log
[
]
=
$this
->
_sql
;
}
$this
->
_errorNum
=
0
;
$this
->
_errorMsg
=
''
;
$this
->
_cursor
=
mysql_query
(
$this
->
_sql
,
$this
->
_resource
)
;
if
(
!
$this
->
_cursor
)
{
$this
->
_errorNum
=
mysql_errno
(
$this
->
_resource
)
;
$this
->
_errorMsg
=
mysql_error
(
$this
->
_resource
)
.
"
SQL=
$this
->
_sql
"
;
if
(
$this
->
_debug
)
{
JError
::
raiseError
(
500
,
'JDatabaseMySQL::query: '
.
$this
->
_errorNum
.
' - '
.
$this
->
_errorMsg
)
;
}
return
false
;
}
return
$this
->
_cursor
;
}
/**
* Description
*
*
@access
public
*
@return
int
The number of affected rows in the previous operation
*
@since
1.0.5
*/
function
getAffectedRows
(
)
{
return
mysql_affected_rows
(
$this
->
_resource
)
;
}
/**
* Execute a batch query
*
*
@access
public
*
@return
mixed
A database resource if successful, FALSE if not.
*/
function
queryBatch
(
$abort_on_error
=
true
,
$p_transaction_safe
=
false
)
{
$this
->
_errorNum
=
0
;
$this
->
_errorMsg
=
''
;
if
(
$p_transaction_safe
)
{
$si
=
$this
->
getVersion
(
)
;
preg_match_all
(
"/(\d+)\.(\d+)\.(\d+)/i"
,
$si
,
$m
)
;
if
(
$m
[
1
]
>=
4
)
{
$this
->
_sql
=
'START TRANSACTION;'
.
$this
->
_sql
.
'; COMMIT;'
;
}
else
if
(
$m
[
2
]
>=
23
&&
$m
[
3
]
>=
19
)
{
$this
->
_sql
=
'BEGIN WORK;'
.
$this
->
_sql
.
'; COMMIT;'
;
}
else
if
(
$m
[
2
]
>=
23
&&
$m
[
3
]
>=
17
)
{
$this
->
_sql
=
'BEGIN;'
.
$this
->
_sql
.
'; COMMIT;'
;
}
}
$query_split
=
preg_split
(
"/[;]+/"
,
$this
->
_sql
)
;
$error
=
0
;
foreach
(
$query_split
as
$command_line
)
{
$command_line
=
trim
(
$command_line
)
;
if
(
$command_line
!=
''
)
{
$this
->
_cursor
=
mysql_query
(
$command_line
,
$this
->
_resource
)
;
if
(
!
$this
->
_cursor
)
{
$error
=
1
;
$this
->
_errorNum
.=
mysql_errno
(
$this
->
_resource
)
.
' '
;
$this
->
_errorMsg
.=
mysql_error
(
$this
->
_resource
)
.
"
SQL=
$command_line
<br />
"
;
if
(
$abort_on_error
)
{
return
$this
->
_cursor
;
}
}
}
}
return
$error
?
false
:
true
;
}
/**
* Diagnostic function
*
*
@access
public
*
@return
string
*/
function
explain
(
)
{
$temp
=
$this
->
_sql
;
$this
->
_sql
=
"
EXPLAIN
$this
->
_sql
"
;
if
(
!
(
$cur
=
$this
->
query
(
)))
{
return
null
;
}
$first
=
true
;
$buffer
=
'<table id="explain-sql">'
;
$buffer
.=
'<thead><tr><td colspan="99">'
.
$this
->
getQuery
(
)
.
'</td></tr>'
;
while
(
$row
=
mysql_fetch_assoc
(
$cur
))
{
if
(
$first
)
{
$buffer
.=
'<tr>'
;
foreach
(
$row
as
$k
=>
$v
)
{
$buffer
.=
'<th>'
.
$k
.
'</th>'
;
}
$buffer
.=
'</tr>'
;
$first
=
false
;
}
$buffer
.=
'</thead><tbody><tr>'
;
foreach
(
$row
as
$k
=>
$v
)
{
$buffer
.=
'<td>'
.
$v
.
'</td>'
;
}
$buffer
.=
'</tr>'
;
}
$buffer
.=
'</tbody></table>'
;
mysql_free_result
(
$cur
)
;
$this
->
_sql
=
$temp
;
return
$buffer
;
}
/**
* Description
*
*
@access
public
*
@return
int
The number of rows returned from the most recent query.
*/
function
getNumRows
(
$cur
=
null
)
{
return
mysql_num_rows
(
$cur
?
$cur
:
$this
->
_cursor
)
;
}
/**
* This method loads the first field of the first row returned by the query.
*
*
@access
public
*
@return
The
value returned in the query or null if the query failed.
*/
function
loadResult
(
)
{
if
(
!
(
$cur
=
$this
->
query
(
)))
{
return
null
;
}
$ret
=
null
;
if
(
$row
=
mysql_fetch_row
(
$cur
))
{
$ret
=
$row
[
0
]
;
}
mysql_free_result
(
$cur
)
;
return
$ret
;
}
/**
* Load an array of single field results into an array
*
*
@access
public
*/
function
loadResultArray
(
$numinarray
=
0
)
{
if
(
!
(
$cur
=
$this
->
query
(
)))
{
return
null
;
}
$array
=
array
(
)
;
while
(
$row
=
mysql_fetch_row
(
$cur
))
{
$array
[
]
=
$row
[
$numinarray
]
;
}
mysql_free_result
(
$cur
)
;
return
$array
;
}
/**
* Fetch a result row as an associative array
*
*
@access
public
*
@return
array
*/
function
loadAssoc
(
)
{
if
(
!
(
$cur
=
$this
->
query
(
)))
{
return
null
;
}
$ret
=
null
;
if
(
$array
=
mysql_fetch_assoc
(
$cur
))
{
$ret
=
$array
;
}
mysql_free_result
(
$cur
)
;
return
$ret
;
}
/**
* Load a assoc list of database rows
*
*
@access
public
*
@param
string
The field name of a primary key
*
@return
array
If <var>key</var> is empty as sequential list of returned records.
*/
function
loadAssocList
(
$key
=
''
)
{
if
(
!
(
$cur
=
$this
->
query
(
)))
{
return
null
;
}
$array
=
array
(
)
;
while
(
$row
=
mysql_fetch_assoc
(
$cur
))
{
if
(
$key
)
{
$array
[
$row
[
$key
]]
=
$row
;
}
else
{
$array
[
]
=
$row
;
}
}
mysql_free_result
(
$cur
)
;
return
$array
;
}
/**
* This global function loads the first row of a query into an object
*
*
@access
public
*
@return
object
*/
function
loadObject
(
)
{
if
(
!
(
$cur
=
$this
->
query
(
)))
{
return
null
;
}
$ret
=
null
;
if
(
$object
=
mysql_fetch_object
(
$cur
))
{
$ret
=
$object
;
}
mysql_free_result
(
$cur
)
;
return
$ret
;
}
/**
* Load a list of database objects
*
* If <var>key</var> is not empty then the returned array is indexed by the value
* the database key. Returns <var>null</var> if the query fails.
*
*
@access
public
*
@param
string
The field name of a primary key
*
@return
array
If <var>key</var> is empty as sequential list of returned records.
*/
function
loadObjectList
(
$key
=
''
)
{
if
(
!
(
$cur
=
$this
->
query
(
)))
{
return
null
;
}
$array
=
array
(
)
;
while
(
$row
=
mysql_fetch_object
(
$cur
))
{
if
(
$key
)
{
$array
[
$row
->
$key
]
=
$row
;
}
else
{
$array
[
]
=
$row
;
}
}
mysql_free_result
(
$cur
)
;
return
$array
;
}
/**
* Description
*
*
@access
public
*
@return
The
first row of the query.
*/
function
loadRow
(
)
{
if
(
!
(
$cur
=
$this
->
query
(
)))
{
return
null
;