カラムの現在の値countProductSelectおよびcountProductInput - INTEGER NOT NULL;SQLiteで新しく作成されたカラムからデータを取得できません
INTEGER DEFAULT NULLを作成する必要があります。
下記のPHPコード。 「:countProductSelectTmpはそのような列」 -
問題は、そのエラーを取得し、時間欄とcountProductSelectTmp countProductInputTmpからのデータとcountProductSelect countProductInputを更新しようとしているではありません。
このエラーを処理するにはどうすればよいですか?あるいは、元の問題を解決するためのより高度なアルゴリズムがありますか? fine manualから
/**
* Updating the database
*
* @return bool
*/
protected function _updateDB()
{
$version = '3.8.4.0';
$this->_pdo->exec('
ALTER TABLE data ADD optionalCountProduct INTEGER DEFAULT NULL;
ALTER TABLE data ADD countProductSelectTmp INTEGER DEFAULT NULL;
ALTER TABLE data ADD countProductInputTmp INTEGER DEFAULT NULL;
UPDATE data SET countProductSelectTmp = countProductSelect, countProductInputTmp = countProductInput;
');
$this->_deleteSQLiteColumn(array('countProductSelect', 'countProductInput'));
// BUG
// countProductSelect and countProductInput can not get the value countProductSelectTmp and countProductInputTmp
$this->_pdo->exec('
ALTER TABLE data ADD countProductSelect INTEGER DEFAULT NULL;
ALTER TABLE data ADD countProductInput INTEGER DEFAULT NULL;
UPDATE data SET countProductSelect = countProductSelectTmp, countProductInput = countProductInputTmp;
UPDATE version SET id = "' . $version . '";
');
$this->_deleteSQLiteColumn(array('countProductSelectTmp', 'countProductInputTmp'));
return true;
}
/**
* Remove column from a SQLite Table
*
* @param array $column name of the column to remove
* @return bool
*/
protected function _deleteSQLiteColumn(array $column)
{
return (bool)$this->_pdo->exec('
BEGIN TRANSACTION;
CREATE TEMPORARY TABLE backup(' . $this->_getFullColumnsString() . ');
INSERT INTO backup SELECT ' . $this->_getShortColumnsString() . ' FROM data;
DROP TABLE data;
CREATE TABLE data(' . $this->_getFullColumnsString($column) . ');
INSERT INTO data SELECT ' . $this->_getShortColumnsString($column) . ' FROM backup;
DROP TABLE backup;
COMMIT;
');
}
問題が残りました。まだ助けが必要です。 – Gemorroj
@ Gemorroj:新しいバージョンはどのように見えますか?私が朝に帰ったときに私は一見を持っています。 –