Suponiendo que en realidad estás queriendo escribir su propia versión (en lugar de utilizar una de las bibliotecas existentes otras respuestas han sugerido, y esas son buenas opciones, también) ...
Aquí hay un par de funciones que puede que le resulte útil examinar. La primera le permite vincular los resultados de una consulta a una matriz asociativa, y la segunda le permite pasar dos matrices, una ordenada de claves ordenadas y la otra una matriz asociativa de datos para esas claves y tener esos datos vinculados a una declaración preparada:
function stmt_bind_assoc (&$stmt, &$out) {
$data = mysqli_stmt_result_metadata($stmt);
$fields = array();
$out = array();
$fields[0] = $stmt;
$count = 1;
while($field = mysqli_fetch_field($data)) {
$fields[$count] = &$out[$field->name];
$count++;
}
call_user_func_array(mysqli_stmt_bind_result, $fields);
}
function stmt_bind_params($stmt, $fields, $data) {
// Dynamically build up the arguments for bind_param
$paramstr = '';
$params = array();
foreach($fields as $key)
{
if(is_float($data[$key]))
$paramstr .= 'd';
elseif(is_int($data[$key]))
$paramstr .= 'i';
else
$paramstr .= 's';
$params[] = $data[$key];
}
array_unshift($params, $stmt, $paramstr);
// and then call bind_param with the proper arguments
call_user_func_array('mysqli_stmt_bind_param', $params);
}
Tenía la esperanza de hacer mi propio, pero no estoy seguro. ¿'$ Db-> fetchAll ($ sql, 2);' se comporta como mysql_fetch_array? Además, ¿por qué parece que hay tanto código redundante que debe existir en cada script? ¿Puedo hacer otra clase para manejar todo hasta el final de esa declaración de catch o try, o se considera una mala práctica? –
@Jon - fetchAll devolverá una matriz asociativa por defecto (se puede cambiar, también hay fetchRow, fetchCol, fetchOne, etc.). Lo ideal es que el try'catch largo solo aparezca una vez en la aplicación dentro del bootstrap (o una inclusión o similar), por lo que no es realmente un problema. – karim79
Ok, esto parece que voy a seguir. ¡Gracias por toda tu ayuda! –