5

私は多くのSQLステートメントを持っていますが、PHP PDOを使用して可能な限り少ない行で短縮して実行する方法または関数があるかどうか疑問に思っています。

Perfiles、Usuarios、Customer、Mps、Poliza、および Servicios を組み合わせて foreach のような名前の配列を作成するというアイデアがありますが、具体的なアイデアはありません。

SQL ステートメント

$sqlpermsPer = "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar)
                                            VALUES ($idPerfil,'Perfiles',0,0,0,0)";
$resultpermsPer = $this->dbConnect->query($sqlpermsPer) or die ($sqlpermsPer);

sqlpermsC = "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar)
                                            VALUES ($idPerfil,'Clientes',0,0,0,0)";
$resultpermsC = $this->dbConnect->query($sqlpermsC) or die ($sqlpermsC);

$sqlpermsU = "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar)
                                            VALUES ($idPerfil,'Usuarios',0,0,0,0)";
$resultpermsU = $this->dbConnect->query($sqlpermsU) or die ($sqlpermsU);

$sqlpermsM = "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar)
                                            VALUES ($idPerfil,'Mps',0,0,0,0)";
$resultpermsM = $this->dbConnect->query($sqlpermsM) or die ($sqlpermsM);

$sqlpermsP = "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar)
                                            VALUES ($idPerfil,'Poliza',0,0,0,0)";
$resultpermsP = $this->dbConnect->query($sqlpermsP) or die ($sqlpermsP);

$sqlpermsS = "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar)
                                            VALUES ($idPerfil,'Servicio',0,0,0,0)";
$resultpermsS = $this->dbConnect->query($sqlpermsS) or die ($sqlpermsS);

前もって感謝します!

4

4 に答える 4

3

これにより、文字列を含む配列が作成され、それらをループして、バインドされたパラメーターを使用して毎回同じクエリを実行します。

$stmt = $this->dbConnect->prepare("INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar) VALUES (:idPerfil,:str,0,0,0,0)");
$stmt->bindParam(':idPerfil', $idPerfil);
$stmt->bindParam(':str',$val);
$in_arr = array("Perfiles","Clientes","Usuarios","Mps","Poliza","Servicio");

foreach ($in_arr as $key => $val) {
    $stmt->execute();
}  
于 2012-09-01T23:14:44.110 に答える
0
INSERT INTO
  table 
    (column_one, column_two) 
  VALUES
    ('value_one_one', 'value_one_two'), 
    ('value_two_one', 'value_two_two'), 
    ('value_three_one', 'value_three_two'); 
于 2012-09-01T23:13:58.603 に答える
0

それぞれを適切に終了する限り、INSERTそれらを連結できます。次のコード例でも、prepareSQL インジェクションを防ぐために を使用しています。

$sql  = "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar) VALUES (:idPerfil,'Perfiles',0,0,0,0);";
ssql .= "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar) VALUES (:idPerfil,'Clientes',0,0,0,0);";
$sql .= "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar) VALUES (:idPerfil,'Usuarios',0,0,0,0);";
$sql .= "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar) VALUES (:idPerfil,'Mps',0,0,0,0);";
$sql .= "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar) VALUES (:idPerfil,'Poliza',0,0,0,0);";
$sql .= "INSERT INTO t_perfiles_permisos (Id_Perfil, Area_Permiso, Buscar, Crear, Eliminar, Modificar) VALUES (:idPerfil,'Servicio',0,0,0,0);";

try
{
  if ( $stmt = $db->prepare( $sql ) )
  {
    if ( ! $stmt->execute( array( ':idPerfil' => $idPerfil ) )
      error_log( $stmt->errorInfo() );
  }
}
catch ( PDOException $e )
{
  error_log( $e->getMessage() );
}
于 2012-09-01T23:14:17.267 に答える
-1

この回答を確認してください。

次のような複数挿入ステートメントを実行したい場合があります。

$qry = 'INSERT INTO table (FirstName, LastName) VALUES ';
$qry .= "(?,?), "
      . "(?,?), "
      . "(?,?)  "
      ;
于 2012-09-01T23:10:57.903 に答える