C'è questo pezzo di codice di un libro che non mi convince ma che funziona ed è giusto:


Codice PHP:
if (isset($_POST['action']) and $_POST['action'] == 'Delete')
{
  include 
$_SERVER['DOCUMENT_ROOT'] . '/LIBRO/chapter7/includes/db.inc.php';

  
// Get jokes belonging to author
  
try
  {
    
$sql 'SELECT id FROM joke WHERE authorid = :id';
    
$s $pdo->prepare($sql);
    
$s->bindValue(':id'$_POST['id']);
    
$s->execute();
  }
  catch (
PDOException $e)
  {
    
$error 'Error getting list of jokes to delete.';
    include 
'error.html.php';
    exit();
  }

  
$result $s->fetchAll();

  
// Delete joke category entries
  
try
  {
    
$sql 'DELETE FROM jokecategory WHERE jokeid = :id';
    
$s $pdo->prepare($sql);
    
// For each joke
    
foreach ($result as $row)
    {
      
$jokeId $row['id'];
      
$s->bindValue(':id'$jokeId);
      
$s->execute();
    }
  }
  catch (
PDOException $e)
  {
    
$error 'Error deleting category entries for joke.';
    include 
'error.html.php';
    exit();
  }

  
// Delete jokes belonging to author
  
try
  {
    
$sql 'DELETE FROM joke WHERE authorid = :id';
    
$s $pdo->prepare($sql);
    
$s->bindValue(':id'$_POST['id']);
    
$s->execute();
  }
  catch (
PDOException $e)
  {
    
$error 'Error deleting jokes for author.';
    include 
'error.html.php';
    exit();
  }

  
// Delete the author
  
try
  {
    
$sql 'DELETE FROM author WHERE id = :id';
    
$s $pdo->prepare($sql);
    
$s->bindValue(':id'$_POST['id']);
    
$s->execute();
  }
  catch (
PDOException $e)
  {
    
$error 'Error deleting author.';
    include 
'error.html.php';
    exit();
  }

  
header('Location: .');
  exit();



Non mi è chiaro perché cancellando i record dalla tabella jokecategory si usa un ciclo for mentre per le altre no. Anche la tabella joke ha più record da cancellare in un solo colpo...