PHP скрипт запускает команду обновления SQL и игнорируется - PullRequest
0 голосов
/ 24 октября 2011

У меня есть собственный скрипт импорта и обновления продуктов для Magento. Сценарий долго работал нормально, я изменил некоторые вещи в скрипте, но команда, которую я не изменил, перестала работать

Это код, который перестал работать:

require_once("connArray.php");
$dbConfig = GetConn();
$db = Zend_Db::factory('Pdo_Mysql', $dbConfig);
$update = "UPDATE catalog_product_entity_decimal p_dec
       SET  p_dec.value = $dec_value
       WHERE  p_dec.entity_id = $entity_id AND p_dec.attribute_id = 64";
echo $update;
echo "<br>";
$result = $db->query($update);
var_dump($result);
echo "<br>";

Вывод:

UPDATE catalog_product_entity_decimal p_dec SET p_dec.value = 30.8 WHERE p_dec.entity_id = 2 AND p_dec.attribute_id = 64
object(Zend_Db_Statement_Pdo)#451 (9) { ["_fetchMode:protected"]=> int(2) ["_stmt:protected"]=> object(PDOStatement)#440 (1) { ["queryString"]=> string(124) "UPDATE catalog_product_entity_decimal p_dec SET p_dec.value = 30.8 WHERE p_dec.entity_id = 2 AND p_dec.attribute_id = 64" } ["_adapter:protected"]=> object(Zend_Db_Adapter_Pdo_Mysql)#33 (12) { ["_pdoType:protected"]=> string(5) "mysql" ["_numericDataTypes:protected"]=> array(16) { [0]=> int(0) [1]=> int(1) [2]=> int(2) ["INT"]=> int(0) ["INTEGER"]=> int(0) ["MEDIUMINT"]=> int(0) ["SMALLINT"]=> int(0) ["TINYINT"]=> int(0) ["BIGINT"]=> int(1) ["SERIAL"]=> int(1) ["DEC"]=> int(2) ["DECIMAL"]=> int(2) ["DOUBLE"]=> int(2) ["DOUBLE PRECISION"]=> int(2) ["FIXED"]=> int(2) ["FLOAT"]=> int(2) } ["_defaultStmtClass:protected"]=> string(21) "Zend_Db_Statement_Pdo" ["_config:protected"]=> array(8) { ["host"]=> string(9) "localhost" ["username"]=> string(16) "***" ["password"]=> string(9) "***" ["dbname"]=> string(17) "***" ["driver_options"]=> array(1) { [1002]=> string(14) "SET NAMES UTF8" } ["charset"]=> NULL ["persistent"]=> bool(false) ["options"]=> array(2) { ["caseFolding"]=> int(0) ["autoQuoteIdentifiers"]=> bool(true) } } ["_fetchMode:protected"]=> int(2) ["_profiler:protected"]=> object(Zend_Db_Profiler)#20 (4) { ["_queryProfiles:protected"]=> array(0) { } ["_enabled:protected"]=> bool(false) ["_filterElapsedSecs:protected"]=> NULL ["_filterTypes:protected"]=> NULL } ["_defaultProfilerClass:protected"]=> string(16) "Zend_Db_Profiler" ["_connection:protected"]=> object(PDO)#32 (0) { } ["_caseFolding:protected"]=> int(0) ["_autoQuoteIdentifiers:protected"]=> bool(true) ["_allowSerialization:protected"]=> bool(true) ["_autoReconnectOnUnserialize:protected"]=> bool(false) } ["_attribute:protected"]=> array(0) { } ["_bindColumn:protected"]=> array(0) { } ["_bindParam:protected"]=> array(0) { } ["_sqlSplit:protected"]=> array(1) { [0]=> string(124) "UPDATE catalog_product_entity_decimal p_dec SET p_dec.value = 30.8 WHERE p_dec.entity_id = 2 AND p_dec.attribute_id = 64" } ["_sqlParam:protected"]=> array(1) { [0]=> string(124) "UPDATE catalog_product_entity_decimal p_dec SET p_dec.value = 30.8 WHERE p_dec.entity_id = 2 AND p_dec.attribute_id = 64" } ["_queryId:protected"]=> NULL } 

После запуска скрипта я проверяю БД, и соответствующая строка не изменилась.
Я скопировал поставленный запрос в phpMyAdmin, и он отлично работает там.

Команда выбора, которую я выполняю непосредственно перед тем, как приведенный выше код работает нормально, и у меня есть другая команда обновления в скрипте, которая работает, поэтому она не выглядит как проблема с подключением.

Спасибо заранее.

///////////////////////////////////// ОБНОВЛЕНИЕ ///////// /////////////////////////////////////

Я пытался изменить код на:

$data = array(
        'value'      => $dec_value
    );

    $where[] = "entity_id = " . $entity_id;
    $where[] = "attribute_id = 64";

    $result = $db->update('catalog_product_entity_decimal', $data, $where);
    var_dump($result);
    echo "<br>";

но все равно не работает. $ результат вывода - int (1).

Я пытался добавить $ db-> beginTransaction () и $ db-> commit () (хотя по умолчанию все классы адаптера Zend_Db работают в режиме автоматической фиксации), но я получаю ошибку: «SQLSTATE [HY000]: общая ошибка: превышено время ожидания блокировки 1205; попробуйте перезапустить транзакцию»

1 Ответ

1 голос
/ 13 ноября 2011

Я исправил проблему. Это была ошибка в моем коде (я загрузил объект продукта до изменения цены и сохранил его после изменения цены, чтобы объект имел старую цену ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...