Author: uwendel
Date: 2008-04-14 17:48:49 +0200 (Mon, 14 Apr 2008)
New Revision: 1449
Added:
trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native_column.phpt
trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native_mixed_style.phpt
Modified:
trunk/php5/ext/pdo_mysqlnd/mysql_statement.c
trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native.phpt
Log:
Reverting the previous commit: check parameter number prior to execute. This is not
desired but gets us a little closer to libmysql and does not hurt on the other hand.
Updating tests.
Modified: trunk/php5/ext/pdo_mysqlnd/mysql_statement.c
===================================================================
--- trunk/php5/ext/pdo_mysqlnd/mysql_statement.c 2008-04-14 14:36:14 UTC (rev 1448)
+++ trunk/php5/ext/pdo_mysqlnd/mysql_statement.c 2008-04-14 15:48:49 UTC (rev 1449)
@@ -379,8 +379,7 @@
/* TODO: MAke sure the param is really free'D there seem to be leaks from
* time to time from the parameter stack building */
#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND
- pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
- pdo_mysql_db_handle *H = S->H;
+ pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
PDO_MYSQL_PARAM_BIND *b;
PDO_DBG_ENTER("pdo_mysql_stmt_param_hook");
@@ -413,8 +412,7 @@
b = (PDO_MYSQL_PARAM_BIND*)param->driver_data;
#if PDO_USE_MYSQLND
- if ((H->emulate_prepare = 1) &&
- (S->params_given < S->num_params)) {
+ if (S->params_given < S->num_params) {
/* too few parameter bound */
PDO_DBG_ERR("too few parameters bound");
strcpy(stmt->error_code, "HY093");
Modified: trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native.phpt
===================================================================
--- trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native.phpt 2008-04-14 14:36:14 UTC (rev
1448)
+++ trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native.phpt 2008-04-14 15:48:49 UTC (rev
1449)
@@ -125,15 +125,6 @@
array(':placeholder' => 'id'));
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
- $stmt = prepex(14, $db, 'SELECT :placeholder FROM test WHERE id > 1',
- array(':placeholder' => 'id'));
- var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
-
- $stmt = prepex(15, $db, 'SELECT :placeholder FROM test WHERE :placeholder >
:placeholder',
- array(':placeholder' => 'test'));
- var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
-
-
for ($num_params = 2; $num_params < 100; $num_params++) {
$params = array(':placeholder' => 'a');
for ($i = 1; $i < $num_params; $i++) {
@@ -292,12 +283,6 @@
if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 1)
printf("[064] Expecting one row, got %d rows\n", $tmp);
- // MySQL 4.1 has issues with this
- $sql = "SELECT id, label FROM test WHERE id = :placeholder AND label = (SELECT label AS
'SELECT' FROM test WHERE id = ?)";
- $stmt = prepex(65, $db, $sql, array(1, 1), array('execute' => array('sqlstate' =>
'HY093')), null, true);
- if (is_object($stmt) && count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) !=
0)
- printf("[066] Expecting no rows, got %d rows\n", $tmp);
-
} catch (PDOException $e) {
printf("[001] %s [%s] %s\n",
$e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
@@ -335,15 +320,6 @@
array(1) {
[0]=>
array(1) {
- ["?"]=>
- string(2) "id"
- }
-}
-array(0) {
-}
-array(1) {
- [0]=>
- array(1) {
["label"]=>
string(1) "?"
}
@@ -385,8 +361,4 @@
string(4) "row1"
}
}
-
-Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number: mixed named and
positional parameters in %s on line %d
-
-Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number: 1065 Query was empty
in %s on line %d
done!
\ No newline at end of file
Added: trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native_column.phpt
===================================================================
--- trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native_column.phpt
(rev 0)
+++ trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native_column.phpt 2008-04-14 15:48:49 UTC
(rev 1449)
@@ -0,0 +1,45 @@
+--TEST--
+MySQL PDO->prepare(), native PS, named placeholder
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+$db = MySQLPDOTest::factory();
+?>
+--FILE--
+<?php
+ require_once('mysql_pdo_test.inc');
+ $db = MySQLPDOTest::factory();
+ MySQLPDOTest::createTestTable($db);
+
+ $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0);
+ if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY))
+ printf("[002] Unable to turn off emulated prepared statements\n");
+
+ $stmt = $db->prepare("SELECT :param FROM test ORDER BY id ASC LIMIT 1");
+ $stmt->execute(array(':param' => 'id'));
+ var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
+
+ if (MySQLPDOTest::isPDOMySQLnd())
+ /* mysqlnd only - Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter
number in %s on line %d */
+ $stmt = @$db->prepare('SELECT :placeholder FROM test WHERE :placeholder >
:placeholder');
+ else
+ $stmt = @$db->prepare('SELECT :placeholder FROM test WHERE :placeholder >
:placeholder');
+ $stmt->execute(array(':placeholder' => 'test'));
+ var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
+
+ $db->exec('DROP TABLE IF EXISTS test');
+ print "done!";
+?>
+--EXPECTF--
+array(1) {
+ [0]=>
+ array(1) {
+ ["?"]=>
+ string(2) "id"
+ }
+}
+array(0) {
+}
+done!
\ No newline at end of file
Added: trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native_mixed_style.phpt
===================================================================
--- trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native_mixed_style.phpt
(rev 0)
+++ trunk/tests/ext/pdo_mysql/pdo_mysql_prepare_native_mixed_style.phpt 2008-04-14
15:48:49 UTC (rev 1449)
@@ -0,0 +1,35 @@
+--TEST--
+MySQL PDO->prepare(), native PS, mixed, wired style
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+$db = MySQLPDOTest::factory();
+?>
+--FILE--
+<?php
+ require_once('mysql_pdo_test.inc');
+ $db = MySQLPDOTest::factory();
+ MySQLPDOTest::createTestTable($db);
+
+ $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0);
+ if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY))
+ printf("[002] Unable to turn off emulated prepared statements\n");
+
+ $stmt = $db->query('DELETE FROM test');
+ $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (1, ?), (2, ?)');
+ $stmt->execute(array('row1', 'row2'));
+ $stmt = $db->prepare("SELECT id, label FROM test WHERE id = :placeholder AND label =
(SELECT label AS 'SELECT' FROM test WHERE id = ?)");
+ $stmt->execute(array(1, 1));
+ var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
+
+ $db->exec('DROP TABLE IF EXISTS test');
+ print "done!";
+?>
+--EXPECTF--
+Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number: mixed named and
positional parameters in %s on line %d
+
+Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number in %s on line %d
+
+Fatal error: Call to a member function execute() on a non-object in %s on line %d
\ No newline at end of file
| Thread |
|---|
| • PHP mysqlnd svn commit: r1449 - in trunk: php5/ext/pdo_mysqlnd tests/ext/pdo_mysql | uwendel | 14 Apr |