Cast object parameters to string in Database\Database

- This makes string casting in Depository->save unnecessary
This commit is contained in:
Hypolite Petovan 2021-10-03 15:23:35 -04:00
parent c40390c202
commit 24734b05fe

View File

@ -549,12 +549,14 @@ class Database
break; break;
} }
foreach ($args as $param => $value) { foreach (array_keys($args) as $param) {
$data_type = PDO::PARAM_STR;
if (is_int($args[$param])) { if (is_int($args[$param])) {
$data_type = PDO::PARAM_INT; $data_type = PDO::PARAM_INT;
} else { } elseif ($args[$param] !== null) {
$data_type = PDO::PARAM_STR; $args[$param] = (string)$args[$param];
} }
$stmt->bindParam($param, $args[$param], $data_type); $stmt->bindParam($param, $args[$param], $data_type);
} }
@ -605,13 +607,16 @@ class Database
$param_types = ''; $param_types = '';
$values = []; $values = [];
foreach ($args as $param => $value) { foreach (array_keys($args) as $param) {
if (is_int($args[$param])) { if (is_int($args[$param])) {
$param_types .= 'i'; $param_types .= 'i';
} elseif (is_float($args[$param])) { } elseif (is_float($args[$param])) {
$param_types .= 'd'; $param_types .= 'd';
} elseif (is_string($args[$param])) { } elseif (is_string($args[$param])) {
$param_types .= 's'; $param_types .= 's';
} elseif (is_object($args[$param]) && method_exists($args[$param], '__toString')) {
$param_types .= 's';
$args[$param] = (string)$args[$param];
} else { } else {
$param_types .= 'b'; $param_types .= 'b';
} }
@ -969,7 +974,7 @@ class Database
} }
/** /**
* Insert a row into a table * Insert a row into a table. Field value objects will be cast as string.
* *
* @param string|array $table Table name or array [schema => table] * @param string|array $table Table name or array [schema => table]
* @param array $param parameter array * @param array $param parameter array
@ -1244,9 +1249,9 @@ class Database
} }
/** /**
* Updates rows * Updates rows in the database. Field value objects will be cast as string.
* *
* Updates rows in the database. When $old_fields is set to an array, * When $old_fields is set to an array,
* the system will only do an update if the fields in that array changed. * the system will only do an update if the fields in that array changed.
* *
* Attention: * Attention:
@ -1561,9 +1566,9 @@ class Database
} }
} }
return $fields; return $fields;
} }
/** /**
* Returns the error number of the last query * Returns the error number of the last query
* *