I'm struggling with a part of my application where I am using Zend_Db_Adapter to create a database schema in mysql per client signup.
I have a database script that contains all the DDL to create the tables, I then read the contents of the file and then execute it using the Zend_Db_Adapter. Following the creation of the database I want to populate it with some data using the same adapter. However this always fails with an error such as:
2011-08-10T14:15:16+01:00 DEBUG (7): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'client_3.users' doesn't exist
Can someone see where in my code it's going slightly wrong? I've had the MySQL logging up to see any errors and there don't appear to be any, and the DDL script works fine when ran by hand.
$databaseName = 'client_' . $clientId;
$createDbStr = "DROP DATABASE IF EXISTS ".$databaseName."; CREATE DATABASE " . $databaseName.";";
$dbAdapter->getConnection()->exec($createDbStr);
//we now create the database adapter for the new database on the server
//as we now populate the user data in the databaes.
$newDbAdapter = Zend_Db::factory('Pdo_Mysql', array(
'host' => 'localhost',
'username' => 'appdbuser',
'password' => 'appdbpassword',
'dbname' => $databaseName
));
//we now load the SQL Script that is used to create the database schema.
$sqlScriptPath = APPLICATION_PATH . DIRECTORY_SEPARATOR . 'datamodel' . DIRECTORY_SEPARATOR . 'client_schema.sql';
$fileUtils = new App_FileSystem_FileUtility();
$sqlScript = "USE ".$databaseName.";";
$sqlScript .= $fileUtils->getFileContents($sqlScriptPath);
//debug sql script;
App_Application_Log::getInstance()->log($sqlScript, Zend_Log::DEBUG);
//we now create the schema
$newDbAdapter->getConnection()->exec($sqlScript);
$usersTable = new Application_Model_UsersTable($newDbAdapter);
$newUserTableData = array(
'username' => 'Administrator',
'fullname' => $contactName',
'email' => $email,
'uuid' => App_Security_Uuid::getInstance()->getUuid(),
'create_date' => new Zend_Db_Expr('now()'),
);
$userId = $usersTable->insert($newUserTableData); //errors here
Is there a step that needs to be done from the running of the DDL script before I can start populating it with data?
Thanks,
Grant