Corso PHP: 24.3 – Accedere a MySQL da PHP (Parte 3^)

24.3.2 Inserimento di nuovi records nel database

Per inserire uno o più records in una tabella di database si usa il comando INSERT.

La sintassi del comando è la seguente:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name,...)]
[(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]

Anche per INSERT così come per la SELECT l’uso comune del comando è assai più semplice di quel che appare dalla sintassi riportata dal manuale.

La forma più comune di INSERT è la seguente:

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

Il significato è abbastanza evidente. Si associano i valori della clausola VALUES ai rispettivi campi (columns) del database. Verrà inserito in DB un nuovo record con i valori assegnati nei campi indicati. Se alcuni campi non sono riportati avranno il valore NULL opuure il valore di default nel caso in sede di definizione della tabella ne sia stato assegnato uno.

Anche in questo caso vediamone l’uso con un esempio nei due casi di utilizzo di Mysqli oppure PDO.
a) Primo caso: utilizzo di Mysqli
Nel caso di uso di Mysqli, ricordiamo, la funzione per eseguire la query è quella già vista:

mysqli_query (mysqli $link , string $query)

che ritorna il valore booleano TRUE o FALSE a seconda che l’esecuzione della query sia andata a buon fine o no.

Come esempio vediamo di inserire un nuovo cliente nella tabella clienti del nostro database di Gestione Ordini (paragr. 24.2 alla pagina http://www.weweb.in/2016/03/12/corso-php-24-mysql/)

Supponendo che i valori dei campi del cliente da inserire siano memorizzati nelle variabili $codcli, $ragsoc, ecc., inseriremo il nuovo record come segue:

<?php
session_start();
include_once("includes/config.mysqli.php");
$query = "INSERT INTO clienti (c_codcli, c_ragsoc, c_piva, c_indirizzo, c_citta, c_pv, c_cap, c_stato, c_telefono, c_email) VALUES ($codcli, $ragsoc, $piva, $indirizzo, $citta, $pv, $cap, $stato, $telefono, $email)";
$result = mysqli_query($sql, $query);
if (!$result) die ("Errore nell'inserimento del cliente: " . mysql_error());
?>

b) Secondo caso: utilizzo di PDO

Nel caso di uso di PDO lo script sarà il seguente:

 

<?php
session_start();
include_once("includes/config.pdo.php");
$query = "INSERT INTO clienti (c_codcli, c_ragsoc, c_piva, c_indirizzo, c_citta, c_pv, c_cap, c_stato, c_telefono, c_email) VALUES(:codcli, :ragsoc, :piva, :indirizzo, :citta, :pv, :cap, :stato, :telefono, :email)";
$sql = $db->prepare($query);
$sql->bindParam(':codcli', $codcli);
$sql->bindParam(':ragsoc', $ragsoc);
$sql->bindParam(':piva', $piva);
$sql->bindParam(':indirizzo', $indirizzo);
$sql->bindParam(':citta', $citta);
$sql->bindParam(':pv', $pv);
$sql->bindParam(':cap', $cap);
$sql->bindParam(':stato', $stato);
$sql->bindParam(':telefono', $telefono);
$sql->bindParam(':email', $email);
if ($sql) $sql->execute();
else print_r($db->errorInfo());
$sql->close();
?>

Nel caso dovessimo inserire più records i cui valori dei campi supponiamo di avere in un array associativo che nel nostro esempio chiamiamo $clienti, utilizzando PDO il nostro script sarà come segue:

 

<?php

session_start();
include_once("includes/config.pdo.php");
$query = "INSERT INTO clienti (c_codcli, c_ragsoc, c_piva, c_indirizzo, c_citta, c_pv, c_cap, c_stato, c_telefono, c_email) VALUES(:codcli, :ragsoc, :piva, :indirizzo, :citta, :pv, :cap, :stato, :telefono, :email)";
$sql = $db->prepare($query);
$sql->bindParam(':codcli', $codcli);
$sql->bindParam(':ragsoc', $ragsoc);
$sql->bindParam(':piva', $piva);
$sql->bindParam(':indirizzo', $indirizzo);
$sql->bindParam(':citta', $citta);
$sql->bindParam(':pv', $pv);
$sql->bindParam(':cap', $cap);
$sql->bindParam(':stato', $stato);
$sql->bindParam(':telefono', $telefono);
$sql->bindParam(':email', $email);
foreach($clienti as $cliente) {
  $codcli = $cliente['codcli'];
  $ragsoc = $cliente['ragsoc'];
  $piva = $cliente['piva'];
  $indirizzo = $cliente['indirizzo'];
  $citta = $cliente['citta'];
  $pv = $cliente['pv'];
  $cap = $cliente['cap'];
  $stato = $cliente['stato'];
  $telefono = $cliente['telefono'];
  $email = $cliente['email'];
  $sql->execute();
}
$affected_rows = $sql->rowCount();
?>

 

Abbiamo mostrato solo l’esempio di utilizzo con PDO, in quanto con mysqli è di più immediata comprensione.

La particolarità di PDO è che possiamo usare una sola prepare() e poi scrivere tanti records associando alle variabili usate nelle bindParam() di volta in volta i campi di un nuovo records. Per ciascun record si eseguirà quindi la funzione execute(). La funzione rowCount() dell’ultima riga ritorna il numero di records inseriti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *