Insertando múltiples valores en múltiples columnas desde una matriz de datos usando una declaración preparada de PDO para MySQL

Soy nuevo en PHP y MySQL (y en la programación en general) y estoy tratando de crear una clase de manejador de base de datos genérica llamadaDatabase_Handler que me ayudará a administrar cosas básicas como insertar, eliminar, seleccionar, actualizar, etc.

Estoy trabajando en una función miembro para manejar la inserción, actualmente. En mi función de inserción, me gustaríabuild una declaración de inserción PDO preparada y ejecutarlo.

Supongo que en algún lugar de mi aplicación, he llamado a la función de inserción de la siguiente manera:

$table = "books";
$cols = array('author', 'title', 'pubdate');
$values = array('Bob Smith', 'Surviving the Zombie Apocalypse', '2010');

$db_handler->insert($table, $cols, $values);

¿Cómo puedo usar los datos de$table, $cols y$values para construir una declaración de inserción PDO preparada? Aquí está mi primer esfuerzo, basado en una respuesta de "Cómo insertar una matriz en una sola declaración preparada de MySQL con PHP y PDO".

public function insert($table, $cols, $values){

        $numvalues = count($values);

        $placeholder = array();
        for($i=0; $i<$numvalues; $i++)
        $placeholder[$i] = '?';

        $sql = 'INSERT INTO '. $table . '(' . implode(",", $cols) . ') ';
        $sql.= 'VAL,UES (' . implode("," $placeholder) . ')"';

        $stmt = $this->dbh->prepare($sql);
        $for($i=0; $i<$numvalues; $i++)
            $stmt->bindParam($i+1, $values[$i])
        $stmt->execute();
}

No creo que esto funcione, pero tal vez te dé una idea de lo que quiero hacer. Estoy un poco confundido porque laejemplo dado en el manual de php.net es

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

Parece que están enviando$name como parámetro de labindParam() funciton, luego asigna un valor a$name después? ¿Cuál es el valor de$name cuando se envía abindParam()? O hacebindParam() solo asocia un parámetro con una variable, sin tomar los datos de esa variable, permitiendoexecute() para manejar esa parte?

Respuestas a la pregunta(3)

Su respuesta a la pregunta