Pergunta

Na minha personalizado modelo de recursos, eu estou tentando usar o fetchAssoc para obter alguns dados de uma tabela.Eu estou tentando cotação de uma matriz em uma declaração, e eu notei que ele não funcionar (retorna uma matriz vazia) ao usar o nome ligações.No entanto, usando o segundo argumento de $select->where() para citar os valores funciona bem.

Estou curioso para saber por que isso não funciona...

$bind = array( 
    'expert_id' => $expert_id,
    'product_id' => $adapter->quote($product_id),
);

//Debug:  Array ( [expert_id] => 1, [product_id] => '3032', '3091', '3132' )

$select = $adapter->select()
    ->from($this->getTable('namespace_module/table'), '*')
    ->where('product_id IN(:product_id)')
    ->where('expert_id = :expert_id');

// Debug: SELECT `namespace_module_table`.* FROM `namespace_module_table` WHERE (product_id IN('3032', '3091', '3132')) AND (expert_id = :expert_id)

mas isso não?

$bind = array( 
    'expert_id' => $expert_id,
);

//Debug: Array(  [expert_id] => 1 )

$select = $adapter->select()
    ->from($this->getTable('namespace_module/table'), '*')
    ->where('product_id IN(?)', $product_id)
    ->where('expert_id = :expert_id');

// Debug: SELECT `namespace_module_table`.* FROM `namespace_module_table` WHERE (product_id IN(:product_id)) AND (expert_id = :expert_id)

É uma regra geral que você não pode utilizar dependente de parâmetros em uma instrução?Eu vi este e este, mas eu pensei Magento $adapter->quote método deveria ter o cuidado de transformar a matriz em uma lista.

Foi útil?

Solução

Magento, e o mais moderno de banco de dados PHP abstrações, em última análise, dependem da DOP biblioteca dependente de parâmetro para implementação dependente de parâmetro de suporte. DOP não suportam a vinculação de matriz para um parâmetro EM para-razões?Foi assim que o tempo que eu venho usando a biblioteca, e é super chato.

Para contornar esse problema, muitos de banco de dados PHP abstrações oferta IN suporte para suas próprias, independente parâmetros.No segundo exemplo de código Magento subjacente do SQL abstração bibliotecas estão gerando um IN instrução para você com o disco rígido de valores codificados da matriz e, em seguida, enviar para o banco de dados.Isso é diferente de usar um limite de parâmetro -- com um limite de parâmetro o seu e o envio de uma instrução SQL com que dependente de parâmetro para o banco de dados, e também dizendo o banco de dados que as variáveis de parâmetros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top