Perché non aggirare i parami funzionano in una dichiarazione nella dichiarazione?
-
28-09-2020 - |
Domanda
Nel mio modello di risorsa personalizzato, sto cercando di utilizzare fetchAssoc
per ottenere alcuni dati da una tabella.Sto cercando di citare un array in una dichiarazione in una dichiarazione, e ho notato che non funziona (restituisce un array vuoto) quando si utilizza Bindings nominati.Tuttavia, utilizzando il secondo argomento di $select->where()
per citare i valori in Funzioni Fine.
Sono solo curioso perché questo non funziona ...
$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)
.
Ma questo fa?
$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)
.
È una regola generale che non è possibile utilizzare parametri rilegati in una dichiarazione nella dichiarazione?Ho visto e Questo , ma pensavo che il metodo $adapter->quote
di Magento avrebbe dovuto prendersi cura di trasformare l'arrayUna lista.
Soluzione
Magento e la maggior parte delle moderne astrazioni del database PHP, in ultima analisi, si affidano all'implementazione dei parametri legata alla biblioteca PDO per il supporto dei parametri vincolato. PDO non supporta l'array di rilegatura a un parametro in un parametro Per motivi?È stato così a lungo che sto usando la biblioteca ed è super fastidioso.