質問

私はこのスクリプトを実行し続け、MySQLエラーを取得します:SQL構文にエラーがあります;MySQLサーバーのバージョンに対応するマニュアルを確認して、「1行目」の近くで使用する正しい構文を確認してください

空のクエリを実行しようとしているようですが、インストールスクリプトを見ると、なぜそれが実行されるのかわかりません。

インストールスクリプト:

<?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();

それが作成するエラー:

インストーラ実行中

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
)

)

その他の注意事項:

列がすでに存在していても、6つのテーブルの変更のうち5つは正常に実行されますが、po_currency addColumn()のコメントを解除すると、上記のエラーが表示されます。私はコードを掘り下げてきましたが、この非常に単純なインストールスクリプトでは何も間違っているとは思いません。何か考えは?

役に立ちましたか?

解決

あなたが選択した答えで見ることができるように ここに, 、TYPE_VARCHARは非推奨です。TYPE_TEXTを使用してみてください。

他のヒント

完璧な解決策ではありませんが、問題のある列を指定する別の方法を使用して、特定の問題を回避しました。

Po_currency alterをこれに置き換えると修正されました:

$installer->getConnection()
    ->addColumn($table, 'po_currency', 'varchar(3) default NULL');

私は以前に何が間違っていたのか理解していませんが、少なくともこれは機能します。これを閲覧している人が私に問題を説明できれば、私はまだそれを感謝します。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top