Additional ugliness required because mysql does stupid stuff like this:
mysql> CREATE TABLE foo (id int) TYPE=innodb;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> SHOW CREATE TABLE foo;
CREATE TABLE `foo` (
`id` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
In addition, BEGIN, COMMIT and ROLLBACK all succeed, even when no tables
support transactions.
proto bool PDOStatement::closeCursor()
Closes the cursor, leaving the statement ready for re-execution.
The purpose of the function is to free up the connection to the server so that
other queries may be issued, but leaving the statement in a state that it can
be re-executed.
This is implemented either as an optional driver specific method (allowing for
maximum efficiency), or as the generic PDO fallback if no driver specific
function is installed.
The PDO generic fallback is semantically the same as writing the following code
in your PHP script:
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
These are effectively named statements with strong constraints on the naming
format. We cater for this in a fairly generic way: allow a driver to replace
the format string we use to generate names from positional parameters. In
addition, if that format is set, we always force a rewrite from regular names
to the strongly enforced names.
floating point values into strings during fetch. This is a compatibility hack
for drivers that return native types rather than string representations.
We use this flag in the test suite to persuade postgres tests to pass.
by name, even when multiple columns have the same name:
$sql = "SELECT 1 a, 2 a, 3 b, 4 c, 5 d, 6 c, 7 a";
echo "$sql\n";
print_r($db->query($sql)->fetchAll(PDO_FETCH_NAMED));
Array
(
[0] => Array
(
[a] => Array
(
[0] => 1
[1] => 2
[2] => 7
)
[b] => 3
[c] => Array
(
[0] => 4
[1] => 6
)
[d] => 5
)
)
Also added two new attributes for use at prepare time;
PDO_ATTR_FETCH_TABLE_NAMES and PDO_ATTR_FETCH_CATALOG_NAMES instruct the driver
that the names of the columns that they return to PDO should include the table
and catalog names respectively. Both attributes may be used together or
independently. The catalog, table and column name components should be
separated by a . character.
SPL is not initialized before PDO, so inheriting from SPL's runtime exception class gives PDO a broken exception class.
We don't currently have a way to express this kind of "soft" dependency in the build system, so I'm disabling inheriting from the runtime exception for now.
new one each time.
Add a hook for persistent connections: it is called when the object goes out of
scope, and offers the driver an opportunity to release per-request scoped data
at the right time.
This hook is used by pdo_sqlite to unregister UDFs, which are dangerous to keep
registered between requests.
estrNcpy() it or use the driver struct.
- table headers do not support single column mode so change to two cols
- there should be only one table header
- Fix handling of read only property 'queryString'
- Fix overloading
- Move class init code to their defining .c files for simplification
- Mark class PDORow as final until there's a need to inherit this and
someone implements the handlers correct then.
The only allowed places to throw them directly are from within the PDO class
constructors or when dealing with transaction level attributes, where
"hard-failure" is a feature.
All other errors should use the PDO error handling mechanism and respect the
users selected error mode.
Changed PDO::lastInsertId() to have following proto:
string PDO::lastInsertId([string name])
this allows arbitrary unique identitifers to be returned from the driver.
The optional name parameter is for databases that require additional contextual
information to be able to return the correct identifier. None currently use
it, but pgsql will be on the list of drivers that do.