Я борюсь с конкретной проблемой, мне нужно вставить данные в несколько таблиц с различной структурой.
У меня есть мой сценарий, как это:
public function insertToPsql($manufacturer_code, $main_type, $subtype_code, $manufacturer, $model, $submodel)
{
try {
$con = new PDO( PSQL_DB_HOST, PSQL_DB_HOST, PSQL_DB_HOST );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "INSERT INTO car_type(manufacturer_code, main_type, subtype_code, manufacturer, model, submodel) VALUES(:manufacturer_code, :main_type, :subtype_code, :manufacturer, :model, :submodel)";
$stmt = $con->prepare( $sql );
$stmt->bindValue( 'manufacturer_code', $manufacturer_code, PDO::PARAM_STR );
$stmt->bindValue( 'main_type', $main_type, PDO::PARAM_STR );
$stmt->bindValue( 'subtype_code', $subtype_code, PDO::PARAM_STR );
$stmt->bindValue( 'manufacturer', $manufacturer, PDO::PARAM_STR );
$stmt->bindValue( 'model', $model, PDO::PARAM_STR );
$stmt->bindValue( 'submodel', $submodel, PDO::PARAM_STR );
$stmt->execute();
}
catch( PDOException $e ) {
echo $e->getMessage();
exit;
}
}
Дело в том, что это не лучшая идея, если мне нужно всегда редактировать ее для каждой таблицы (многие из моих таблиц имеют около 40 столбцов).
Хорошо, что я всегда вставляю их все. Есть ли какой-нибудь способ, как вставить во все столбцы и не указывать данные, а просто дать ему массив или объект всех данных?
Что-то вроде:
$sql = "INSERT INTO car_type VALUES(:$data)";
Если у вас есть массив, элементы которого расположены в том же порядке, что и столбцы в таблице, вы можете сделать:
$values = array($manufacturer_code, $main_type, $subtype_code, $manufacturer, $model, $submodel);
$placeholders = implode(',', array_fill(0, count($values), '?'));
$sql = "INSERT INTO car_type VALUES ($placeholders)";
$stmt = $con->prepare($sql);
$stmt->execute($values);
Других решений пока нет …