Que se passe-t-il dans ce script d'installation?[dupliquer]
-
13-12-2019 - |
Question
Je continue d'exécuter ce script et j'obtiens une erreur MySQL:Vous avez une erreur dans votre syntaxe SQL;vérifiez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de " à la ligne 1
Il semble qu'il essaie d'exécuter une requête vide, mais en regardant mon script d'installation, je ne vois pas pourquoi il le ferait.
Script d'installation:
<?php
Mage::log('Running Mdlogistics install script');
echo "installer running";
$installer = $this;
$installer->startSetup();
// Note that these addColumn() return the query results, rather than the
// instance of the db connection object, so they can't be chained.
$installer->getConnection()
->addColumn($installer->getTable('sales/order'),
'ship_status', array(
'type' => Varien_Db_Ddl_Table::TYPE_SMALLINT,
'nullable' => false,
'default' => 0,
'comment' => 'True if this order has been shipped from the warehouse'
));
$installer->getConnection()
->addColumn($installer->getTable('sales/order'),
'edi_850_sent_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array(
'nullable' => true,
'default' => null,
'comment' => 'Timestamp EDI 850 was sent to Highjump'
));
$installer->getConnection()
->addColumn($installer->getTable('sales/order'),
'edi_856_received_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null,
array(
'nullable' => true,
'default' => null,
'comment' => 'Timestamp EDI 856 was received from highjump'
));
$installer->getConnection()
->addColumn($installer->getTable('sales/order'),
'po_value', Varien_Db_Ddl_Table::TYPE_FLOAT, null,
array(
'nullable' => true,
'default' => null,
'comment' => 'Total amount sent to Binatone for this order'
));
// This one causes the errors, but I don't see anything wrong with it
$installer->getConnection()
->addColumn($installer->getTable('sales/order'),
'po_currency', Varien_Db_Ddl_Table::TYPE_VARCHAR, null,
array(
'nullable' => true,
'default' => null,
'comment' => 'Currency used for this order'
));
$installer->getConnection()
->addColumn($installer->getTable('sales/order'),
'creditcard_fee', Varien_Db_Ddl_Table::TYPE_FLOAT, null,
array(
'nullable' => true,
'default' => null,
'comment' => 'Credit card expense for this order'
)
);
$installer->endSetup();
Les erreurs qu'il crée:
programme d'installation en cours d'exécution
PDOException Object
(
[message:protected] => SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[string:Exception:private] =>
[code:protected] => 42000
[file:protected] => /var/www/html/lib/Zend/Db/Statement/Pdo.php
[line:protected] => 228
[trace:Exception:private] => Array
(
[0] => Array
(
[file] => /var/www/html/lib/Zend/Db/Statement/Pdo.php
[line] => 228
[function] => execute
[class] => PDOStatement
[type] => ->
[args] => Array
(
[0] => Array
(
)
)
)
[1] => Array
(
[file] => /var/www/html/lib/Varien/Db/Statement/Pdo/Mysql.php
[line] => 110
[function] => _execute
[class] => Zend_Db_Statement_Pdo
[type] => ->
[args] => Array
(
[0] => Array
(
)
)
)
[2] => Array
(
[file] => /var/www/html/app/code/core/Zend/Db/Statement.php
[line] => 291
[function] => _execute
[class] => Varien_Db_Statement_Pdo_Mysql
[type] => ->
[args] => Array
(
[0] => Array
(
)
)
)
[3] => Array
(
[file] => /var/www/html/lib/Zend/Db/Adapter/Abstract.php
[line] => 480
[function] => execute
[class] => Zend_Db_Statement
[type] => ->
[args] => Array
(
[0] => Array
(
)
)
)
[4] => Array
(
[file] => /var/www/html/lib/Zend/Db/Adapter/Pdo/Abstract.php
[line] => 238
[function] => query
[class] => Zend_Db_Adapter_Abstract
[type] => ->
[args] => Array
(
[0] => ALTER TABLE `sales_flat_order` ADD COLUMN `po_currency` varchar
[1] => Array
(
)
)
)
[5] => Array
(
[file] => /var/www/html/lib/Varien/Db/Adapter/Pdo/Mysql.php
[line] => 428
[function] => query
[class] => Zend_Db_Adapter_Pdo_Abstract
[type] => ->
[args] => Array
(
[0] => ALTER TABLE `sales_flat_order` ADD COLUMN `po_currency` varchar
[1] => Array
(
)
)
)
[6] => Array
(
[file] => /var/www/html/lib/Varien/Db/Adapter/Pdo/Mysql.php
[line] => 347
[function] => query
[class] => Varien_Db_Adapter_Pdo_Mysql
[type] => ->
[args] => Array
(
[0] => ALTER TABLE `sales_flat_order` ADD COLUMN `po_currency` varchar
)
)
[7] => Array
(
[file] => /var/www/html/lib/Varien/Db/Adapter/Pdo/Mysql.php
[line] => 848
[function] => raw_query
[class] => Varien_Db_Adapter_Pdo_Mysql
[type] => ->
[args] => Array
(
[0] => ALTER TABLE `sales_flat_order` ADD COLUMN `po_currency` varchar
)
)
[8] => Array
(
[file] => /var/www/html/.modman/Magento-MDLogistics-Inventory/Mdlogistics/sql/ebuynow_mdlogistics_setup/install-0.8.2.php
[line] => 54
[function] => addColumn
[class] => Varien_Db_Adapter_Pdo_Mysql
[type] => ->
[args] => Array
(
[0] => sales_flat_order
[1] => po_currency
[2] => varchar
[3] =>
[4] => Array
(
[nullable] => 1
[default] =>
[comment] => Currency used for this order
)
)
)
[9] => Array
(
[file] => /var/www/html/app/code/core/Mage/Core/Model/Resource/Setup.php
[line] => 624
[args] => Array
(
[0] => /var/www/html/.modman/Magento-MDLogistics-Inventory/Mdlogistics/sql/ebuynow_mdlogistics_setup/install-0.8.2.php
)
[function] => include
)
[10] => Array
(
[file] => /var/www/html/app/code/core/Mage/Core/Model/Resource/Setup.php
[line] => 421
[function] => _modifyResourceDb
[class] => Mage_Core_Model_Resource_Setup
[type] => ->
[args] => Array
(
[0] => install
[1] =>
[2] => 0.8.2
)
)
[11] => Array
(
[file] => /var/www/html/app/code/core/Mage/Core/Model/Resource/Setup.php
[line] => 327
[function] => _installResourceDb
[class] => Mage_Core_Model_Resource_Setup
[type] => ->
[args] => Array
(
[0] => 0.8.2
)
)
[12] => Array
(
[file] => /var/www/html/app/code/core/Mage/Core/Model/Resource/Setup.php
[line] => 235
[function] => applyUpdates
[class] => Mage_Core_Model_Resource_Setup
[type] => ->
[args] => Array
(
)
)
[13] => Array
(
[file] => /var/www/html/app/code/core/Mage/Core/Model/App.php
[line] => 417
[function] => applyAllUpdates
[class] => Mage_Core_Model_Resource_Setup
[type] => ::
[args] => Array
(
)
)
[14] => Array
(
[file] => /var/www/html/app/code/core/Mage/Core/Model/App.php
[line] => 343
[function] => _initModules
[class] => Mage_Core_Model_App
[type] => ->
[args] => Array
(
)
)
[15] => Array
(
[file] => /var/www/html/app/Mage.php
[line] => 684
[function] => run
[class] => Mage_Core_Model_App
[type] => ->
[args] => Array
(
[0] => Array
(
[scope_code] =>
[scope_type] => store
[options] => Array
(
)
)
)
)
[16] => Array
(
[file] => /var/www/html/index.php
[line] => 88
[function] => run
[class] => Mage
[type] => ::
[args] => Array
(
[0] =>
[1] => store
)
)
)
[previous:Exception:private] =>
[errorInfo] => Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
)
)
Autres notes:
Cinq des six modifications de table fonctionneront correctement, même si les colonnes existent déjà, mais chaque fois que je décommente le po_currency addColumn (), j'obtiens les erreurs que j'ai incluses ci-dessus.J'ai examiné le code et je ne vois vraiment rien qui ressorte comme faux dans ce script d'installation très simple.Des idées?
La solution
Comme vous pouvez le voir dans la réponse sélectionnée ici, TYPE_VARCHAR est obsolète.Essayez d'utiliser TYPE_TEXT.
Autres conseils
Ce n'est pas une solution parfaite, mais j'ai contourné le problème spécifique en utilisant une méthode alternative pour spécifier la colonne incriminée.
Le remplacement de l'alter po_currency par ceci l'a corrigé:
$installer->getConnection()
->addColumn($table, 'po_currency', 'varchar(3) default NULL');
Je ne comprends pas ce que je faisais de mal avant, mais au moins ça marche.J'apprécierais quand même si quelqu'un parcourant ceci pouvait m'expliquer le problème.