List:Commits« Previous MessageNext Message »
From:uwendel Date:April 14 2008 3:48pm
Subject:PHP mysqlnd svn commit: r1449 - in trunk: php5/ext/pdo_mysqlnd tests/ext/pdo_mysql
View as plain text  
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_mysqluwendel14 Apr