Notice: Array to string conversion lib/Zend/Db/Statement/Pdo.php on line 228

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Евгений Смирнов
  • Группа: Заблокирован
  • Сообщений: 81
  • Регистрация: 03.03.2011

20.04.2011 19:41

    /**
     * Save uploaded file and set its name to banner
     *
     * @param SI_banner_Model_Mysql4_Banner $object
     */
    protected function _beforeSave(Mage_Core_Model_Abstract $object)
    {
	Mage::log($object);
    	$value = $object->getData(self::IMAGE);
		$value2 = $object->getData(self::IMAGE2);

    	$path = Mage::helper('banner')->getBannerMediaPath();      	    	
    	if (is_array($value) && !empty($value['delete'])) {
    		try {
    			$io = new Varien_Io_File();
	        	$io->open(array('path' => $path));
				$image = str_replace(Mage::helper('banner')->getBannerMediaUrl(), '', $value['value']);	        	
	        	
	        	if ($io->fileExists($image)) {
	        		$io->rm($image);
	        	}
    		} catch (Exception $e) {
    		}
			$object->setData(self::IMAGE, '');
            return;
        }        
        
		try {
            $uploader = new Varien_File_Uploader(self::IMAGE);
            $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
            $uploader->setAllowRenameFiles(true);
            $uploader->save($path);
                        
            $object->setData(self::IMAGE, $uploader->getUploadedFileName());
        } catch (Exception $e) {
			$object->unsetData(self::IMAGE);
        }
 		//start
    	if (is_array($value2) && !empty($value2['delete'])) {
    		try {
    			$io2 = new Varien_Io_File();
	        	$io2->open(array('path' => $path));
				$image2 = str_replace(Mage::helper('banner')->getBannerMediaUrl(), '', $value2['value']);
	        	if ($io2->fileExists($image2)) {
	        		$io2->rm($image2);
	        	}
    		} catch (Exception $e) {
    		}
			$object->setData(self::IMAGE2, '');
            return;
        }        
        
		try {
            $uploader = new Varien_File_Uploader(self::IMAGE2);
            $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
            $uploader->setAllowRenameFiles(true);
            $uploader->save($path);
                        
            $object->setData(self::IMAGE2, $uploader->getUploadedFileName());
        } catch (Exception $e) {
			$object->unsetData(self::IMAGE2);
        }
		//end 
        
        //save colors to settings table
        $settings = $this->getSettings();
        foreach ($object->getData() as $key => $value) {
        	if (false !== strpos($key, '_color')) {
        		$settings->setData($key, $value);
        	}
        }
        $settings->save();
        
    	return parent::_beforeSave($object);
    }


Объект когда ставлю галочки возле изображений на удаление.
2011-04-20T16:27:55+00:00 DEBUG (7): SI_Banner_Model_Banner Object
(
    [_eventPrefix:protected] => core_abstract
    [_eventObject:protected] => object
    [_resourceName:protected] => banner/banner
    [_resource:protected] => 
    [_resourceCollectionName:protected] => banner/banner_collection
    [_cacheTag:protected] => 
    [_dataSaveAllowed:protected] => 1
    [_isObjectNew:protected] => 
    [_data:protected] => Array
        (
            [form_key] => frYOBrCeh8Qymgg1
            [title] => test5
            [image] => Array
                (
                    [delete] => 1
                    [value] => */magento/media/banner/test51.jpg
                )

            [image_sec] => Array
                (
                    [delete] => 1
                    [value] => */magento/media/banner/test52.jpg
                )

            [url] => http://www.armo.ee
            [menu_title_strong] => Menu Title Strong
            [menu_title] => Menu Title
            [store_ids] => 1
            [position] => 5
            [status] => 1
            [menu_title_strong_color] => #fff
            [menu_hover_title_strong_color] => #fff
            [menu_title_color] => #fff
            [menu_hover_title_color] => #fff
            [menu_bg_color] => #fff
            [banner_id] => 5
        )

    [_hasDataChanges:protected] => 1
    [_origData:protected] => 
    [_idFieldName:protected] => banner_id
    [_isDeleted:protected] => 
)

Если удаляется одно изображение то удаляются оба изображения, второму изображению присваивается свойство Array и в логе ошибка:
2011-04-20T16:27:55+00:00 ERR (3): Notice: Array to string conversion  /public_web/www/magento/lib/Zend/Db/Statement/Pdo.php on line 228

Еррор внутри функции ?stmt->execute($params)
    public function _execute(array $params = null)
    {
       try {
            if ($params !== null) {
                return $this->_stmt->execute($params);
            } else {
                return $this->_stmt->execute();
            }
        } catch (PDOException $e) {
            #require_once 'Zend/Db/Statement/Exception.php';
            throw new Zend_Db_Statement_Exception($e->getMessage(), (int) $e->getCode(), $e);
        }
    }


#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

20.04.2011 19:45

Сообщение Notice: Array to string conversion /public_web/www/magento/lib/Zend/Db/Statement/Pdo.php on line 228 означает, что вы передаёте в качестве параметра запроса SQL массив.
Учитывая, что запрос SQL представляет собой текст, его параметры должны быть строками, массив недопустим.

#3 Евгений Смирнов
  • Группа: Заблокирован
  • Сообщений: 81
  • Регистрация: 03.03.2011

20.04.2011 20:16

На данный момент, я убрал return; после удаления файла.

Система удаляет файл, но в базе данных не удаляется строчка связь с данным файлом.

если я добавляю что-то вроде такого:

if((is_array($value2) && !empty($value2['delete']))||(is_array($value) && !empty($value['delete']))){
    return;
}

То ничего толкового не выходит

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

20.04.2011 20:19

Сохраняется ли диагностическое сообщение интерпретатора PHP Notice: Array to string conversion lib/Zend/Db/Statement/Pdo.php on line 228?

#5 Евгений Смирнов
  • Группа: Заблокирован
  • Сообщений: 81
  • Регистрация: 03.03.2011

20.04.2011 20:26

Нет. Данное сообщение теперь в логах отсутствует.

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

20.04.2011 20:28

Тогда согласно пункту 1 правил форума писать новые проблемы в данную ветку смысла нет: одна тема - один вопрос.

#7 Евгений Смирнов
  • Группа: Заблокирован
  • Сообщений: 81
  • Регистрация: 03.03.2011

20.04.2011 20:46

Допустил ошибку так что можно возвратиться сюда.

		if((is_array($value) && !empty($value['delete']))||(is_array($value2) && !empty($value2['delete']))){
			return;
		}

При таком условии выдает ту же ошибку, только постом выше, условие было неправильно, налажал.
В базе данных так же Array, вместо второго изображения(когда удаляю первое)

#8 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

20.04.2011 20:48

Сохраняется ли диагностическое сообщение интерпретатора PHP Notice: Array to string conversion lib/Zend/Db/Statement/Pdo.php on line 228?

#9 Евгений Смирнов
  • Группа: Заблокирован
  • Сообщений: 81
  • Регистрация: 03.03.2011

20.04.2011 20:51

Вероятно, следую указанным вами совету яндекса, я должен ответить
ДА!!11!!!!!
, но отвечу
да
.

#10 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

20.04.2011 21:55

У данного диагностического сообщения существует ровно одна причина. Других причин нет.

#11 Евгений Смирнов
  • Группа: Заблокирован
  • Сообщений: 81
  • Регистрация: 03.03.2011

21.04.2011 10:12

Напрямую этот метод я не вызываю.

#12 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

21.04.2011 12:01

Знаете ли про возможность вложенных вызовов функций в языке PHP?

Поделиться темой: