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>