Annotation of embedaddon/php/ext/pdo_mysql/tests/pdo_mysql_prepare_native_named_placeholder.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: MySQL PDO->prepare(), native PS, named placeholder
3: --SKIPIF--
4: <?php
5: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
6: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
7: MySQLPDOTest::skip();
8: $db = MySQLPDOTest::factory();
9: ?>
10: --FILE--
11: <?php
12: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
13: $db = MySQLPDOTest::factory();
14:
15: try {
16:
17: $db->exec('DROP TABLE IF EXISTS test');
18: $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE));
19:
20: $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0);
21: if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY))
22: printf("[002] Unable to turn off emulated prepared statements\n");
23:
24: // INSERT a single row
25: $stmt = $db->prepare("INSERT INTO test(id, label) VALUES (100, ':placeholder')");
26:
27: // Yes, there is no placeholder to bind to and named placeholder
28: // do not work with MySQL native PS, but lets see what happens!
29: // The ':placeholder' is a string constant in the INSERT statement.
30: // I would expect to get an error message, but this is not what happens.
31: $stmt->execute(array(':placeholder' => 'row1'));
32: if ('00000' !== $stmt->errorCode())
33: printf("[003] Execute has failed, %s %s\n",
34: var_export($stmt->errorCode(), true),
35: var_export($stmt->errorInfo(), true));
36:
37: // Ok, what has happened: anything inserted into the DB?
38: $stmt = $db->prepare('SELECT id, label FROM test');
39: $stmt->execute();
40: var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
41:
42: // Now the same with emulated PS.
43: $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1);
44: if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY))
45: printf("[004] Unable to turn on emulated prepared statements\n");
46:
47: // Note that the "named placeholder" is enclosed by double quotes.
48: $stmt = $db->prepare("INSERT INTO test(id, label) VALUES(101, ':placeholder')");
49: // No replacement shall be made
50: $stmt->execute(array(':placeholder' => 'row1'));
51: // Again, I'd like to see an error message
52: if ('00000' !== $stmt->errorCode())
53: printf("[005] Execute has failed, %s %s\n",
54: var_export($stmt->errorCode(), true),
55: var_export($stmt->errorInfo(), true));
56:
57: // Now, what do we have in the DB?
58: $stmt = $db->prepare('SELECT id, label FROM test ORDER BY id');
59: $stmt->execute();
60: var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
61:
62: } catch (PDOException $e) {
63: printf("[001] %s [%s] %s\n",
64: $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
65: }
66:
67: print "done!";
68: ?>
69: --CLEAN--
70: <?php
71: require dirname(__FILE__) . '/mysql_pdo_test.inc';
72: $db = MySQLPDOTest::factory();
73: $db->exec('DROP TABLE IF EXISTS test');
74: ?>
75: --EXPECTF--
76: [003] Execute has failed, 'HY093' array (
77: 0 => 'HY093',
78: 1 => NULL,
79: 2 => NULL,
80: )
81: array(0) {
82: }
83: array(1) {
84: [0]=>
85: array(2) {
86: ["id"]=>
87: string(3) "101"
88: ["label"]=>
89: string(12) ":placeholder"
90: }
91: }
92: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>