Mètode 2: Consulta directa ($conn->query
)
$sql = "INSERT INTO $taula (catala, castella) VALUES ('$registre_nou', 'registre nou, completar registre')";
$result = $conn->query($sql);
$respostes = array();
Pros:
- Simplicitat :
- És més curt i fàcil d’escriure, especialment per a desenvolupadors novells o per a casos senzills on no hi ha riscos evidents.
- No requereix configuració addicional:
- Funciona directament amb extensions bàsiques com
mysqli
sense necessitat de configurar PDO.
- Funciona directament amb extensions bàsiques com
Contres:
- Vulnerabilitat a injeccions SQL :
- Com que les variables (
$registre_nou
) s’insereixen directament a la cadena SQL, un usuari malintencionat podria introduir codi SQL per manipular la consulta. Per exemple:phpCopiar1$registre_nou = “‘; DROP TABLE users; –“;Això podria resultar en una consulta perillosa com:sqlCopiar1INSERTINTO taula (catala, castella) VALUES (”; DROPTABLE users; –‘, ‘registre nou, completar registre’);
- Com que les variables (
- Manca de maneig de caràcters especials:
- Si
$registre_nou
conté caràcters especials (com'
o\
), provocarà errors sintàctics o comportaments inesperats.
- Si
- Menys flexible:
- No permet reutilitzar la consulta amb diferents valors sense reconstruir-la completament.
- Gestió d’errors limitada:
- Sense un bloc
try-catch
, és més difícil detectar i gestionar errors de manera adequada.
- Sense un bloc
- Dependència de l’extensió
mysqli
:- Si més tard decideixes canviar a una altra base de dades (com PostgreSQL), hauràs de reescriure tot el codi relacionat amb
mysqli
.
- Si més tard decideixes canviar a una altra base de dades (com PostgreSQL), hauràs de reescriure tot el codi relacionat amb
Mètode 1: Consulta preparada (prepared statement
)
$sql = "INSERT INTO $taula (catala, castella) VALUES (:catala, :castella)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':catala', $registre_nou, PDO::PARAM_STR);
$stmt->bindValue(':castella', 'registre nou, completar registre', PDO::PARAM_STR);
$stmt->execute();
echo "Registre inserit correctament.";
Pros:
0 Seguretat contra injeccions SQL
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
En aquest cas, encara que $username
contingui '; DROP TABLE users; --
, no es podrà executar com a part de la consulta SQL.
- Maneig de caràcters especials :
- Les consultes preparades escapen automàticament caràcters especials (com cometes simples
'
o barres invertides\
), prevenint errors sintàctics.
- Les consultes preparades escapen automàticament caràcters especials (com cometes simples
- Flexibilitat /Reutilització de consultes
- Pots utilitzar el mateix patró de consulta preparada per inserir múltiples registres canviant només els valors dels paràmetres.
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
foreach ($users as $user) {
$stmt->execute($user);
}
3. Millor gestió d’errors:
- Amb PDO, pots capturar excepcions (
PDOException
) i gestionar-les de manera estructurada (per exemple, mitjançant blocstry-catch
).
try {
$stmt->execute();
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
4.Compatibilitat amb bases de dades múltiples:
- PDO és una interfície genèrica que treballa amb diferents sistemes de gestió de bases de dades (MySQL, PostgreSQL, SQLite, etc.).
Contres:
- Més complexitat inicial :
- Requereix més línies de codi i una comprensió bàsica de les consultes preparades i els lligams de paràmetres.
- Dependència de PDO :
- Necessites configurar una connexió PDO per utilitzar consultes preparades, cosa que pot ser un pas addicional si estàs acostumat a usar extensions més antigues com
mysqli
.
- Necessites configurar una connexió PDO per utilitzar consultes preparades, cosa que pot ser un pas addicional si estàs acostumat a usar extensions més antigues com