Author: uwendel
Date: 2008-02-05 16:55:49 +0100 (Tue, 05 Feb 2008)
New Revision: 1256
Added:
trunk/tests/ext/pdo/pdo_stmt_bindvalue.phpt
Log:
Basic bindValue(). Assertion 13 fails, bindValue() does not
return false if you bind more values than there are placeholder.
However, it sets the error flags as it seems (Postgres, MySQL).
Added: trunk/tests/ext/pdo/pdo_stmt_bindvalue.phpt
===================================================================
--- trunk/tests/ext/pdo/pdo_stmt_bindvalue.phpt (rev 0)
+++ trunk/tests/ext/pdo/pdo_stmt_bindvalue.phpt 2008-02-05 15:55:49 UTC (rev 1256)
@@ -0,0 +1,117 @@
+--TEST--
+PDO Common: PDOStatement->bindValue()
+--SKIPIF--
+<?php # vim:ft=php
+if (!extension_loaded('pdo')) die('skip');
+$dir = getenv('REDIR_TEST_DIR');
+if (false == $dir) die('skip no driver');
+require_once $dir . 'pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) .
'/../../pdo/tests/');
+require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
+$db = PDOTest::factory();
+
+$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), grp
VARCHAR(10))');
+$db->exec('INSERT INTO test VALUES(1, \'A\', \'Group1\')');
+$db->exec('INSERT INTO test VALUES(2, \'B\', \'Group2\')');
+
+try {
+
+ $stmt = $db->prepare('SELECT id FROM test WHERE id > ? ORDER BY id ASC');
+
+ if (false !== ($tmp = @$stmt->bindValue()))
+ printf("[001] Expecting boolean false got %s\n", var_export($tmp, true));
+
+ if (false !== ($tmp = @$stmt->bindValue(1)))
+ printf("[002] Expecting boolean false got %s\n", var_export($tmp, true));
+
+ if (false !== ($tmp = @$stmt->bindValue(array())))
+ printf("[003] Expecting boolean false got %s\n", var_export($tmp, true));
+
+ $stmt = $db->prepare('SELECT id FROM test WHERE id > ? ORDER BY id ASC');
+ $stmt->execute();
+ $out = 1;
+
+ if (true !== ($tmp = $stmt->bindValue(1, $out)))
+ printf("[004] Expecting boolean false got %s\n", var_export($tmp, true));
+
+ if (true !== ($tmp = $stmt->bindValue(1, PHP_INT_MAX)))
+ printf("[005] Expecting boolean false got %s\n", var_export($tmp, true));
+
+ if (false !== ($tmp = @$stmt->bindValue(0, $out)))
+ printf("[006] Expecting boolean false got %s\n", var_export($tmp, true));
+
+ // Invalid offset
+ if (false !== ($tmp = @$stmt->bindValue(PHP_INT_MAX, $out)))
+ printf("[007] Expecting boolean false got %s\n", var_export($tmp, true));
+
+ // Invalid data type
+ $valid = array(PDO::PARAM_BOOL, PDO::PARAM_NULL,
+ PDO::PARAM_INT, PDO::PARAM_STR, PDO::PARAM_LOB);
+ do {
+ $invalid = mt_rand(-1 * PHP_INT_MAX + 1, PHP_INT_MAX);
+ } while (in_array($invalid, $valid));
+
+ if (false !== ($tmp = @$stmt->bindColumn(1, $out, $invalid)))
+ printf("[008] Expecting boolean false got %s\n", var_export($tmp, true));
+
+ // plain vanilla bind
+ $stmt = $db->prepare('SELECT id FROM test WHERE id > ? ORDER BY id ASC');
+ $in = 0;
+ if (!$stmt->bindValue(1, $in))
+ printf("[009] Cannot bind value, %s %s\n",
+ var_export($stmt->errorCode(), true), var_export($stmt->errorInfo(), true));
+
+ // in = 1 must not affect the statement
+ $in = 1;
+
+ $stmt->execute();
+ $out1 = $out2 = null;
+ if (!$stmt->bindColumn(1, $out1))
+ printf("[010] Cannot bind output column, %s %s\n",
+ var_export($stmt->errorCode(), true), var_export($stmt->errorInfo(), true));
+
+ printf("Expecting 2 rows, SELECT ... WHERE id > 0\n");
+ while ($stmt->fetch(PDO::FETCH_BOUND))
+ printf("in = 0, id = %s (%s)\n", var_export($out1, true), gettype($out1));
+
+ if (!$stmt->bindValue(1, 1))
+ printf("[011] Cannot bind value, %s %s\n",
+ var_export($stmt->errorCode(), true), var_export($stmt->errorInfo(), true));
+
+ $stmt->execute();
+ printf("Expecting 1 row, SELECT ... WHERE id > 1\n");
+ while ($stmt->fetch(PDO::FETCH_BOUND))
+ printf("in = 1, id = %s (%s)\n", var_export($out1, true), gettype($out1));
+
+ // bind more values than there are placeholder...
+ $stmt = $db->prepare('SELECT id FROM test WHERE id > ? ORDER BY id ASC');
+ $in = 1;
+ if (!$stmt->bindValue(1, $in))
+ printf("[012] Cannot bind value, %s %s\n",
+ var_export($stmt->errorCode(), true), var_export($stmt->errorInfo(), true));
+
+ if (false !== ($tmp = @$stmt->bindValue(2, $in)))
+ printf("[013] Can bind value to non-existing placeholder, got %s, %s %s\n",
+ var_export($tmp, true),
+ var_export($stmt->errorCode(), true), var_export($stmt->errorInfo(), true));
+
+} catch (PDOException $e) {
+ // we should never get here, we use warnings, but never trust a system...s
+ printf("[001] %s, [%s} %s\n",
+ $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
+}
+print "done!";
+?>
+--EXPECTF--
+Expecting 2 rows, SELECT ... WHERE id > 0
+in = 0, id = '1' (string)
+in = 0, id = '2' (string)
+Expecting 1 row, SELECT ... WHERE id > 1
+in = 1, id = '2' (string)
+Expecting 1 row, SELECT ... WHERE id > 1
+in = 1, id = '2' (string)
+done!
\ No newline at end of file
| Thread |
|---|
| • PHP mysqlnd svn commit: r1256 - trunk/tests/ext/pdo | uwendel | 5 Feb |