<?php
Class SafePDO
extends
PDO {
public
static
function
exception_handler(
$exception
) {
die
('Uncaught exception: '.
$exception
->getMessage());
}
public
function
__construct(
$dsn
,
$username
='',
$password
='',
$driver_options
=
array
()) {
set_exception_handler(
array
(
__CLASS__
, 'exception_handler'));
parent::__construct(
$dsn
,
$username
,
$password
,
$driver_options
);
restore_exception_handler();
}
}
?>
Para usarla hay que crear un archivo PHP llamado por ejemplo SafePDO con el contenido del archivo citado m??s arriba.
Y en cuando tengamos que conectar a nuestra base de datos:<?php
include_once
('SafePDO.php' );
$dsn
= 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8';
$opt
=
array
(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
$pdo
=
new
SafePDO(
$dsn
,DB_USER,DB_PASSWORD);?>[#2] matthew at button-mashers dot net [2014-05-07 23:31:23]
When using prepared statements there is no official PDO feature to show you the
final
query string that is submitted to a database complete with the parameters you passed.
Use this simple
function
for
debugging. The values you are passing may not be what you expect.
<?php
function
build_pdo_query(
$string
,
$array
) {
$keys
=
array_map
('
strlen
',
array_keys
(
$array
));
array_multisort
(
$keys
, SORT_DESC,
$array
);
foreach
(
$array
as
$k
=>
$v
) {
$replacement
=
is_numeric
(
$v
) ?
$v
:
"'{$v}'"
;
$string
=
str_replace
(
$k
,
$replacement
,
$string
);
}
return
$string
;
}
echo
build_pdo_query(
$query
,
$params
);
Merge the prepare()
and
execute() in one
function
like a sprintf().
And like sprintf, I choose to
use
unnamed args (?) ;)
you could still
use
old insecure query() ( not prepared ) with renamed
function
:)
<?php
class
MyPDO
extends
PDO{
const
PARAM_host='localhost';
const
PARAM_port='3306';
const
PARAM_db_name='test';
const
PARAM_user='root';
const
PARAM_db_pass='';
public
function
__construct(
$options
=null){
parent::__construct('mysql:host='.MyPDO::PARAM_host.';port='.MyPDO::PARAM_port.';dbname='.MyPDO::PARAM_db_name,
MyPDO::PARAM_user,
MyPDO::PARAM_db_pass,
$options
);
}
public
function
query(
$query
){
$args
= func_get_args();
array_shift
(
$args
);
$reponse
= parent::prepare(
$query
);
$reponse
->execute(
$args
);
return
$reponse
;
}
public
function
insecureQuery(
$query
){
return
parent::query(
$query
);
}
}
$db
=
new
MyPDO();
$db
->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$t1
= isset(
$_GET
[
"t1"
])?
$_GET
[
"t1"
]:1;
while
(
$o
=
$ret
->fetch())
{
echo
$o
->nom.PHP_EOL;
}
?>
[#4] lkmorlan at uwaterloo dot ca [2011-01-04 07:25:38]
You may also have to edit /etc/freetds.conf. Make sure the TDS version is recent, e.g.,
"tds version = 8.0"
.
[#5] lkmorlan at uwaterloo dot ca [2010-06-29 09:38:33]
This works to get UTF8 data from MSSQL:<?php
$db
=
new
PDO('dblib:host=your_hostname;dbname=your_db;charset=UTF-8',
$user
,
$pass
);?>[#6] jose at thezcompany dot com [2010-02-17 12:39:09]
I ran into a real annoying bug/feature when using PDO
for
SQL statements that
use
SQL user variables. I was working on some logic
for
a Geo Proximity Search
for
an events-venues system (sharing is caring so it's below)
and
it just wouldn't take
and
the errors returned were garbage. The SQL was sound
as
I verified it. So
if
you're having this issue, I hope this helps. What you need to
do
is
break
apart the query into two...
From:
<?php
$sql
="set @latitude=:lat;
set @longitude=:lon;
set @radius=20;
set @lng_min = @longitude - @radius/
abs
(
cos
(radians(@latitude))*69);
set @lng_max = @longitude + @radius/
abs
(
cos
(radians(@latitude))*69);
set @lat_min = @latitude - (@radius/69);
set @lat_max = @latitude + (@radius/69);
SELECT *,
3956 * 2 * ASIN(SQRT(POWER(SIN((@latitude -
ABS
(venue_lat)) * PI()/180 / 2),2) +
COS
(@latitude * PI()/180) *
COS
(
ABS
(venue_lat) * PI()/180) * POWER(SIN((@longitude - venue_lon) * PI()/180 / 2),2))) AS distance
FROM events LEFT JOIN venues ON venues.venue_id = events.venue_fk
WHERE (venue_lon BETWEEN @lng_min AND @lng_max)
AND (venue_lat BETWEEN @lat_min
and
@lat_max)
AND events.event_date >= CURDATE()
AND events.event_time >= CURTIME()
ORDER BY distance DESC;";
$stmt
=
$this
->_db->prepare(
$sql
);
$stmt
->bindParam(':lat',
$lat
, PDO::PARAM_STR);
$stmt
->bindParam(':lon',
$lon
, PDO::PARAM_STR);
$stmt
->bindParam(':offset',
$offset
, PDO::PARAM_INT);
$stmt
->bindParam(':max',
$max
, PDO::PARAM_INT);
$stmt
->execute();?> To:<?php
$sql
= "SET @latitude=:lat;
SET @longitude=:lon;
SET @radius=20;
SET @lng_min=@longitude - @radius/
abs
(
cos
(radians(@latitude))*69);
SET @lng_max=@longitude + @radius/
abs
(
cos
(radians(@latitude))*69);
SET @lat_min=@latitude - (@radius/69);
SET @lat_max=@latitude + (@radius/69);";
$this
->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$stmt
=
$this
->_db->prepare(
$sql
);
$stmt
->bindParam(':lat',
$lat
, PDO::PARAM_STR);
$stmt
->bindParam(':lon',
$lon
, PDO::PARAM_STR);
$stmt
->execute();
$sql
= "SELECT *,
(3956 * 2 * ASIN(SQRT(POWER(SIN((@latitude -
ABS
(venue_lat)) * PI()/180 / 2),2) +
COS
(@latitude * PI()/180) *
COS
(
ABS
(venue_lat) * PI()/180) * POWER(SIN((@longitude - venue_lon) * PI()/180 / 2),2)))) AS distance
FROM events LEFT JOIN venues ON venues.venue_id = events.venue_fk
WHERE (venue_lon BETWEEN @lng_min AND @lng_max)
AND (venue_lat BETWEEN @lat_min
and
@lat_max)
AND events.event_date >= CURDATE()
AND events.event_time >= CURTIME()
ORDER BY distance DESC
LIMIT :offset,:max;";
$stmt
=
$this
->_db->prepare(
$sql
);
$stmt
->bindParam(':offset',
$offset
, PDO::PARAM_INT);
$stmt
->bindParam(':max',
$max
, PDO::PARAM_INT);
$stmt
->execute();?>Hope this helps anyone out there!
[#7] paul dot maddox at gmail dot com [2009-08-27 05:54:14]
I decided to create a singleton wrapper
for
PDO that ensures only one instance is ever used.
It uses PHP 5.3.0's __callStatic functionality to pass on statically called methods to PDO.
This means you can just call it statically from anywhere without having to initiate
or
define the object.
Usage examples:<?php DB::
exec
(
"DELETE FROM Blah"
);
foreach
( DB::query(
"SELECT * FROM Blah"
)
as
$row
){
print_r(
$row
);
}
?>
Code:
<?php
class
DB {
private
static
$objInstance
;
private
function
__construct() {}
private
function
__clone() {}
public
static
function
getInstance( ) {
if
(!self::
$objInstance
){
self::
$objInstance
=
new
PDO(DB_DSN, DB_USER, DB_PASS);
self::
$objInstance
->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return
self::
$objInstance
;
} #
end
method
final
public
static
function
__callStatic(
$chrMethod
,
$arrArguments
) {
$objInstance
= self::getInstance();
return
call_user_func_array(
array
(
$objInstance
,
$chrMethod
),
$arrArguments
);
} #
end
method }
?>
[#8] rijnzael at gmail dot com [2008-09-04 13:46:40]
If you plan on using prepared statements to issue a series of KILLs, think again. PDO apparently does not support this,
and
will tell you, assuming you don't put any parameters in the statement (a situation in which it would be pointless to
use
prepared statements anyway). If you
do
specify some ?-mark parameters, it will just spit out an error that doesn't help at all.
[#9] cmcculloh [2008-06-25 12:14:44]
It appears that PDO SQL statements can not make
use
of comments. Or at least, when I was trying to
use
them with mine it was crashing without error
and
giving me a blank page (even though I surrounded with
try
catch
block).
[#10] ob.php from daevel.fr [2007-12-30 12:57:48]
Be careful with PDO
extends
:
if
you
use
the smileaf's example, PDO will close the connection only at the
end
of the script, because of the
"array( $this )"
parameter used with the setAttribute() method.
Instead, I
use
only this :
$this
->setAttribute( PDO::ATTR_STATEMENT_CLASS,
array
(
$this
->statementClassName,
array
() ) );
And in prepare()
and
query() method you can populate the
"dbh"
if
you really need it.
[#11] neonmandk at gmail dot com [2007-12-10 04:29:51]
If you will make a OBJ row from PDO you can
use
this eg.
$resKampange
=
$dbc
->prepare(
"SELECT * FROM Table LIMIT 1"
);
$resKampange
->execute();
$rowKampange
=
$resKampange
->fetch( PDO::FETCH_OB );
echo
$rowKampange
->felt1;
Good lock :0)
[#12] Ostap [2007-12-03 02:08:04]
There is a book titled
"Learning PHP Data Objects"
written by Dennis Popel
and
published by Packt. There is a post with further links (ordering, reviews) at author's blog: http:
[#13] nospam dot list at unclassified dot de [2007-11-13 16:24:31]
When using persistent connections, pay attention not to leave the database connection in some kind of locked state. This can happen when you start a transaction by hand (i.e. not through the PDO->beginTransaction() method), possibly even acquire some locks (e.g. with
"SELECT ... FOR UPDATE"
,
"LOCK TABLES ..."
or
in SQLite with
"BEGIN EXCLUSIVE TRANSACTION"
)
and
then your PHP script ends with a fatal error, unhandled exception
or
under other circumstances that lead to an unclean
exit
.
To
use
that database again, it may then be necessary to disable the persistence attribute to get a
new
database connection
or
restart the web server. (Persistent connections should not work with a PHP-CGI anyway.) It does not work (tested with PHP 5.2.3/WinXP
and
SQLite) to close a persistent database connection - it will not actually be closed but instead returned to PDO's connection pool.
The only thing you can
do
to resolve the lock
as
a regular user (I imagine) is to
try
and
get all of your persistent connections in a single script
and
unlock the tables resp.
end
the transactions with the appropriate SQL statements (
"UNLOCK TABLES"
in MySQL,
"ROLLBACK"
for
transactions). Should they fail, there is no problem, but one
or
some of them might succeed
and
thereby resolve your locking problem.
[#14] xorinox at vtxmail dot ch [2007-11-04 15:52:25]
I have seen a lot of user struggling with calling mysql procedures with in/out/inout parameters using bindParam. There seems to be a bug
or
missing feature within the mysql C api. This at least I could find out after reading a lot of posts at different places...
At the moment I workaround it like below.
$con
is a PDO object:
<?php
$con
->query(
"set @i_param = 'myValue'"
);
$proc
->execute();
$proc
->execute();
$o_param
=
$con
->query(
"select @o_param"
)->fetchColumn();
$con
->query(
"set @io_param = 'myValue'"
);
$proc
->execute();
$io_param
=
$con
->query(
"select @io_param"
)->fetchColumn();
?>
[#15] Konstantin at Tokar dot ru [2007-10-16 08:34:21]
Example 5:
<?php
try
{
$dbh
=
new
PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
array
(PDO::ATTR_PERSISTENT => true));
.......
}
catch
(Exception
$e
) {
$dbh
->rollBack();
echo
"Failed: "
.
$e
->getMessage();
}
?>
We must change the last two lines to
catch
the error connecting to the database:
}
catch
(Exception
$e
) {
echo
"Failed: "
.
$e
->getMessage();
$dbh
->rollBack();
}
?>
[#16] anton dot clarke at sonikmedia dot com [2007-09-02 12:12:59]
Not all PDO drivers
return
a LOB
as
a file stream;
mysql 5 is one example. Therefore when streaming a mime typed object from the database you cannot
use
fpassthru
.
The following is a modified example that works with a mysql database. (Tested FreeBSD v 6.2 with mysql 5.0.45
and
php 5.2.3)
<?php
ob_start();
$db
=
new
PDO('mysql:host=localhost;dbname=<SOMEDB>', '<USERNAME>', 'PASSWORD');
$stmt
=
$db
->prepare(
"select contenttype, imagedata from images where id=?"
);
$stmt
->execute(
array
(
$_GET
['id']));
$stmt
->bindColumn(1,
$type
, PDO::PARAM_STR, 256);
$stmt
->bindColumn(2,
$lob
, PDO::PARAM_LOB);
$stmt
->fetch(PDO::FETCH_BOUND);
ob_clean();
header(
"Content-Type: $type"
);
echo
$lob
;
?>
Please note the inclusion of buffer control. I only needed this when using '
include
','
include_once
','
require
',
or
'
require_once
' - my feeling is there is a subtle issue with those options
as
even an
empty
include
file caused a buffer issue
for
me. === AND YES, I DID CHECK MY INCLUDE FILES DID NOT HAVE SPURIOUS WHITESPACE ETC OUTSIDE THE <?php ?> DELIMITERS! ===
[#17] metalim [2007-05-25 05:38:07]
From Oracle example:<?php
$stmt
->beginTransaction();
$stmt
->execute();
$stmt
->commit();?>PDOStatement has no beginTransaction(), nor commit(). Please fix documentation.
[#18] bart at mediawave dot nl [2007-05-23 07:57:00]
It seems MySQL doesn't support scrollable cursors. So unfortunately PDO::CURSOR_SCROLL wont work.
[#19] djlopez at gmx dot de [2007-03-12 05:04:53]
Note this:
Won't work:
$sth
=
$dbh
->prepare('SELECT name, colour, calories FROM fruit WHERE ? < ?');THIS WORKS!
$sth
=
$dbh
->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ?');Parameters cannot be applied on column names!!
[#20] smileaf at smileaf dot org [2007-03-01 10:57:14]If you intend on extending PDOStatement
and
your using setAttribute(PDO::ATTR_STATEMENT_CLASS, ...)you must override the __construct() of your PDOStatement
class
.failure to
do
so will result in an error on any PDO::query() call.Warning: PDO::query() [
function
.PDO-query]: SQLSTATE[HY000]: General error: user-supplied statement does not accept constructor argumentsHere is a minimum PDO
and
PDOStatement
class
<?phpclass Database
extends
PDO {
function
__construct(
$dsn
,
$username
=
""
,
$password
=
""
,
$driver_options
=
array
()) {
parent::__construct(
$dsn
,
$username
,
$password
,
$driver_options
);
$this
->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array
('DBStatement',
array
(
$this
)));
}
}
class
DBStatement
extends
PDOStatement {
public
$dbh
;
protected
function
__construct(
$dbh
) {
$this
->dbh =
$dbh
;
}
}
?>
[#21] php at moechofe dot com [2007-02-17 11:52:59]Simple example to
extends
PDO
<?php
class
connexion
extends
PDO{
public
$query
= null;
public
function
prepare(
$statement
,
$driver_options
=
array
() )
{
$this
->query =
$statement
;
return
parent::prepare(
$statement
,
$driver_options
=
array
() );
}
public
function
last_query()
{
return
$this
->query;
}
}
class
connexion_statement
extends
PDOStatement{
protected
$pdo
;
protected
function
__construct(
$pdo
)
{
$this
->pdo =
$pdo
;
}
public
function
fetchFirst()
{
$row
=
$this
->fetch( PDO::FETCH_NUM );
return
$row
[0];
}
public
function
fetch(
$fetch_style
= null,
$cursor_orientation
= null,
$cursor_offset
= null )
{
$row
= parent::fetch(
$fetch_style
,
$cursor_orientation
,
$cursor_offset
);
if
(
is_array
(
$row
) )
foreach
(
$row
as
$key
=>
$value
)
if
(
strval
(
intval
(
$value
)) ===
$value
)
$row
[
$key
] =
intval
(
$value
);
elseif
(
strval
(
floatval
(
$value
)) ===
$value
)
$row
[
$key
] =
floatval
(
$value
);
return
$row
;
}
public
function
execute(
$args
= null )
{
if
(
is_array
(
$args
) )
return
parent::execute(
$args
);
else
{
$args
= func_get_args();
return
eval
( '
return
parent::execute(
$args
);' );
}
}
public
function
last_query()
{
return
$this
->pdo->last_query();
}
}
$pdo
=
new
connexion( ... );
$pdo
->setAttribute( PDO::ATTR_STATEMENT_CLASS,
array
( 'connexion_statement',
array
(
$pdo
) ) );
?>
[#22] webform at aouie dot website [2006-09-27 23:38:02]If you
use
$dbh
=
new
PDO('pgsql:host=localhost;
dbname=test_basic01',
$user
,
$pass
);
and
you get the following error:PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08006] [7] could not connect to server: Connection refused\n\tIs the server running on host
"localhost"
and
accepting\n\tTCP/IP connections on port 5432?'then
as
pointed out under pg_connect at: http:
$sth
=
$dbh
->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ?');The parameter cannot be applied on table names!!
[#24] paulius_k at yahoo dot com [2006-07-25 08:42:58]If you need to get Output variable from MSSQL stored procedure,
try
this :-- PROCEDURECREATE PROCEDURE spReturn_Int @err int OUTPUT ASSET @err = 11GO
$sth
=
$dbh
->prepare(
"EXECUTE spReturn_Int ?"
);
$sth
->bindParam(1,
$return_value
, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT);
$sth
->execute();
print
"procedure returned $return_value\n"
;
[#25] nicolas at serpe dot org [2006-05-21 12:36:29]
I
use
PDO with the ODBC driver to query stored procedures in a MS SQL Server 2005 Database under Windows XP Professional with IIS 5
and
PHP 5.1.4. You may have the same problems with a different configuration.
I experienced 2 very time consuming errors:
1. The first one is when you
return
the result of a SELECT query,
and
you get the following clueless message:
>>> Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[24000]: Invalid cursor state: 0 [Microsoft][SQL Native Client]Invalid cursor state (SQLFetchScroll[0] at ext\pdo_odbc\odbc_stmt.c:372)' in (YOUR_TRACE_HERE) <<<Your exact message may be different, the part to pay attention to is
"Invalid cursor state"
.-> I found that I had this error because I didn't
include
"SET NOCOUNT ON"
in the *body* of the stored procedure. By
default
the server returns a special piece of information along with the results, indicating how many rows were affected by the stored procedure,
and
that's not handled by PDO.
2. The second error I had was:
>>> Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[22003]: Numeric value out of range: 0 [Microsoft][SQL Native Client]Numeric value out of range (SQLFetchScroll[0] at ext\pdo_odbc\odbc_stmt.c:372)' in (YOUR_TRACE_HERE) <<<Another meaningless error
"Numeric value out of range"
... -> I was actually returning a
date
datatype (datetime
or
smalldatetime)
"as is"
, that is, without converting it to varchar before including it in the result set... I don't know
if
PDO is responsible
for
converting it to a PHP datatype, but it doesn't. Convert it before it reaches PHP.
[#26] pokojny at radlight dot com [2006-04-23 08:50:58]
I wanted to extend PDO
class
to store statistics of DB usage,
and
I faced some problems. I wanted to
count
number of created statements
and
number of their executings. So PDOStatement should have link to PDO that created it
and
stores the statistical info. The problem was that I didn't knew how PDO creates PDOStatement (constructor parameters
and
so on), so I have created these two classes:<?php
class
PDOp {
protected
$PDO
;
public
$numExecutes
;
public
$numStatements
;
public
function
__construct(
$dsn
,
$user
=NULL,
$pass
=NULL,
$driver_options
=NULL) {
$this
->PDO =
new
PDO(
$dsn
,
$user
,
$pass
,
$driver_options
);
$this
->numExecutes = 0;
$this
->numStatements = 0;
}
public
function
__call(
$func
,
$args
) {
return
call_user_func_array(
array
(&
$this
->PDO,
$func
),
$args
);
}
public
function
prepare() {
$this
->numStatements++;
$args
= func_get_args();
$PDOS
= call_user_func_array(
array
(&
$this
->PDO, 'prepare'),
$args
);
return
new
PDOpStatement(
$this
,
$PDOS
);
}
public
function
query() {
$this
->numExecutes++;
$this
->numStatements++;
$args
= func_get_args();
$PDOS
= call_user_func_array(
array
(&
$this
->PDO, 'query'),
$args
);
return
new
PDOpStatement(
$this
,
$PDOS
);
}
public
function
exec
() {
$this
->numExecutes++;
$args
= func_get_args();
return
call_user_func_array(
array
(&
$this
->PDO, '
exec
'),
$args
);
}
}
class
PDOpStatement
implements
IteratorAggregate {
protected
$PDOS
;
protected
$PDOp
;
public
function
__construct(
$PDOp
,
$PDOS
) {
$this
->PDOp =
$PDOp
;
$this
->PDOS =
$PDOS
;
}
public
function
__call(
$func
,
$args
) {
return
call_user_func_array(
array
(&
$this
->PDOS,
$func
),
$args
);
}
public
function
bindColumn(
$column
, &
$param
,
$type
=NULL) {
if
(
$type
=== NULL)
$this
->PDOS->bindColumn(
$column
,
$param
);
else
$this
->PDOS->bindColumn(
$column
,
$param
,
$type
);
}
public
function
bindParam(
$column
, &
$param
,
$type
=NULL) {
if
(
$type
=== NULL)
$this
->PDOS->bindParam(
$column
,
$param
);
else
$this
->PDOS->bindParam(
$column
,
$param
,
$type
);
}
public
function
execute() {
$this
->PDOp->numExecutes++;
$args
= func_get_args();
return
call_user_func_array(
array
(&
$this
->PDOS, 'execute'),
$args
);
}
public
function
__get(
$property
) {
return
$this
->PDOS->
$property
;
}
public
function
getIterator() {
return
$this
->PDOS;
}
}
?>
Classes have properties with original PDO
and
PDOStatement objects, which are providing the functionality to PDOp
and
PDOpStatement.
From outside, PDOp
and
PDOpStatement look like PDO
and
PDOStatement, but also are providing wanted info.
[#27] keyvez at hotmail dot com [2006-03-09 12:49:40]
PDO doesn't
return
OUTPUT params from mssql stored procedures<?php
$Link
=
new
PDO('mssql:host=sqlserver;dbname=database', 'username','password');
$ErrorCode
= 0;
$Stmt
=
$Link
->prepare('p_sel_all_termlength ?');
$Stmt
->bindParam(1,
$ErrorCode
,PDO::PARAM_INT,4);
$Stmt
->execute();
echo
"Error = "
.
$ErrorCode
.
"\n"
;
?>
[#28] www.navin.biz [2006-02-19 10:16:04]
Below is an example of extending PDO & PDOStatement classes:<?phpclass Database
extends
PDO{
function
__construct()
{
parent::__construct('mysql:dbname=test;host=localhost', 'root', '');
$this
->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array
('DBStatement',
array
(
$this
)));
}
}
class
DBStatement
extends
PDOStatement{
public
$dbh
;
protected
function
__construct(
$dbh
)
{
$this
->dbh =
$dbh
;
$this
->setFetchMode(PDO::FETCH_OBJ);
}
public
function
foundRows()
{
$rows
=
$this
->dbh->prepare('SELECT found_rows() AS rows',
array
(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE));
$rows
->execute();
$rowsCount
=
$rows
->fetch(PDO::FETCH_OBJ)->rows;
$rows
->closeCursor();
return
$rowsCount
;
}
}?>
[#29] Dariusz Kielar [2006-02-12 22:50:42]
I found a nice pdo modification written in php called Open Power Driver. It has identical API with the original, but allows you to cache query results: http:
[#30] shaolin at adf dot nu [2006-02-07 18:18:50]
If your having problems re-compiling PHP with PDO
as
shared module
try
this.
--enable-pdo=shared
--with-pdo-mysql=shared,/usr/local/mysql
--with-sqlite=shared
--with-pdo-sqlite=shared
1. If PDO is built
as
a shared modules, all PDO drivers must also be
built
as
shared modules.
2. If ext/pdo_sqlite is built
as
a shared module, ext/sqlite must also
be built
as
a shared module.
3. In the extensions entries,
if
ext/pdo_sqlite is built
as
a shared
module, php.ini must specify pdo_sqlite first, followed by sqlite.
[#31] tomasz dot wasiluk at gmail dot com [2006-01-01 04:09:06]
Watch out
for
putting spaces in the DSN
mysql:host=localhost;dbname=test works
mysql: host = localhost; dbname=test works
mysql: host = localhost; dbname = test doesn't work...
[#32] Matthias Leuffen [2005-12-04 01:36:13]
Hi there,
because of ZDE 5.0
and
other PHP-IDEs
do
not seem to support PDO from PHP5.1 in code-completion-database yet, I wrote a code-completion alias
for
the PDO
class
.
NOTE: This Class has no functionality
and
should be only included to your IDE-Project but NOT(!) to your application.<?phpclass PDO {
const
ERR_ALREADY_EXISTS = 0;
const
ERR_CANT_MAP = 0;
const
ERR_NOT_FOUND = 0;
const
ERR_SYNTAX = 0;
const
ERR_CONSTRAINT = 0;
const
ERR_MISMATCH = 0;
const
ERR_DISCONNECTED = 0;
const
ERR_NONE = 0;
const
ATTR_ERRMODE = 0;
const
ATTR_TIMEOUT = 0;
const
ATTR_AUTOCOMMIT = 0;
const
ATTR_PERSISTENT = 0;
}
class
PDOStatement {
public
function
bindValue (
$no
,
$value
) {}
public
function
fetch () {}
public
function
nextRowset () {}
public
function
execute() {}
public
function
errorCode () {}
public
function
errorInfo () {}
public
function
rowCount () {}
public
function
setFetchMode (
$mode
) {}
public
function
columnCount () {}
}
[#33] ng4rrjanbiah at rediffmail dot com [2005-03-15 22:53:49]Some useful links on PDO:1. PDO Wiki ( http: