El mensaje de error es:
ERROR FATAL Error no detectado: no se puede desempaquetar la matriz con claves de cadena
Sé que simplemente puedo ejecutar el método fetch()
dos veces y pasar el ['q']
y ['bind']
pero estoy tratando de familiarizarme con el uso del nuevo ...
para descomprimir valores. Quiero pasar los valores así:
(string) SQL, (Array) Bind Values
Pero creo que intenta desempaquetar la matriz de valores de vinculación, así como la matriz de respuesta del fetch()
método. ¿Es posible desempaquetar esta matriz?
Se ve algo como esto:
array(2) {
["q"] => string(7) "example"
["bind"] => array(1) {
["example"] => string(3) "one"
}
}
Este es el código completo, en caso de que necesite ver cómo encaja todo:
class ModelController {
public static function execute($sql, $vals) {
var_dump($vals);
}
}
class ModelContainer {
private $queries = [];
public function add_model(Model $model, $name) {
$this->queries[$name] = $model;
return $this;
}
public function exec_all() {
foreach($this->queries as $q) {
ModelController::execute(...$q->fetch());
}
}
public function exec($name) {
}
}
class Model {
private $sql;
private $vals = [];
public function set_q($statement) {
$this->sql = $statement;
return $this;
}
public function bind($vals = []) {
$this->vals = $vals;
return $this;
}
public function fetch() {
return ['q' => (string)$this->sql,
'bind' => $this->vals ];
}
}
$m = new ModelContainer();
$m->add_model((new Model)->set_q('example SQL content here')->bind(['example' => 'example value here']), 'one');
$m->exec_all();
hacer un
$values = array_values($q->fetch()); ModelController::execute(...$values)
– apokryfos
17/11/2016 a las 19:44
¡Eso funcionó completamente! ¿Podría dar una respuesta a lo que
array_values()
Qué hace en esta situación en relación con el desembalaje? Se lo agradecería @apokryfos– Jaquarh
17/11/2016 a las 19:46