Para responder a la pregunta de Elmo, que puede crear un contenedor DOP que permite funciones SQL como NOW(). Solo necesita pasar un argumento adicional con las columnas para las que desea usar las funciones de SQL. Esta es la mía:
function pInsertFunc($action, $table, $values, $sqlfunctions)
{
global $pdb;
// There's no way to pass an SQL function like "NOW()" as a PDO parameter,
// so this function builds the query string with those functions. $values
// and $sqlfunctions should be key => value arrays, with column names
// as keys. The $values values will be passed in as parameters, and the
// $sqlfunction values will be made part of the query string.
$value_columns = array_keys($values);
$sqlfunc_columns = array_keys($sqlfunctions);
$columns = array_merge($value_columns, $sqlfunc_columns);
// Only $values become ':paramname' PDO parameters.
$value_parameters = array_map(function($col) {return (':' . $col);}, $value_columns);
// SQL functions go straight in as strings.
$sqlfunc_parameters = array_values($sqlfunctions);
$parameters = array_merge($value_parameters, $sqlfunc_parameters);
$column_list = join(', ', $columns);
$parameter_list = join(', ', $parameters);
$query = "$action $table ($column_list) VALUES ($parameter_list)";
$stmt = $pdb->prepare($query);
$stmt->execute($values);
}
utilizar de esta manera:
$values = array(
'ID' => NULL,
'name' => $username,
'address' => $address,
);
$sqlfuncs = array(
'date' => 'NOW()',
);
pInsertFunc("INSERT INTO", "addresses", $values, $sqlfuncs);
La cadena de consulta que da como resultado el siguiente aspecto:
INSERT INTO addresses (ID, name, address, date) VALUES (:ID, :name, :address, NOW())
correcta, y el mismo principio se aplica cuando al portar a DOP –
I parece que está obteniendo un error en PDO aunque cuando hago esto: '$ stmt-> bindParam (': time_added', NOW(), PDO :: PARAM_STR);' ¿Es el PDO: PARAM_STR? – Chris
@Ollie +1 para la parte mysql. Ahora estoy atrapado con la parte PDO. – Chris