1--TEST-- 2Change column count after statement has been prepared 3--SKIPIF-- 4<?php 5if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded'); 6require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc'); 7require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); 8MySQLPDOTest::skip(); 9?> 10--FILE-- 11<?php 12require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); 13 14$db = MySQLPDOTest::factory(); 15$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 16 17$db->exec('DROP TABLE IF EXISTS test'); 18$db->exec('CREATE TABLE test (id INTEGER PRIMARY KEY NOT NULL, name VARCHAR(255) NOT NULL)'); 19 20$stmt = $db->prepare('INSERT INTO test (id, name) VALUES(:id, :name)'); 21$stmt->execute([ 22 'id' => 10, 23 'name' => 'test', 24]); 25 26$stmt = $db->prepare('SELECT * FROM test WHERE id = :id'); 27$stmt->execute(['id' => 10]); 28var_dump($stmt->fetchAll(\PDO::FETCH_ASSOC)); 29 30$db->exec('ALTER TABLE test ADD new_col VARCHAR(255)'); 31$stmt->execute(['id' => 10]); 32var_dump($stmt->fetchAll(\PDO::FETCH_ASSOC)); 33 34?> 35--CLEAN-- 36<?php 37require __DIR__ . '/mysql_pdo_test.inc'; 38MySQLPDOTest::dropTestTable(); 39?> 40--EXPECT-- 41array(1) { 42 [0]=> 43 array(2) { 44 ["id"]=> 45 string(2) "10" 46 ["name"]=> 47 string(4) "test" 48 } 49} 50array(1) { 51 [0]=> 52 array(3) { 53 ["id"]=> 54 string(2) "10" 55 ["name"]=> 56 string(4) "test" 57 ["new_col"]=> 58 NULL 59 } 60} 61