PHP handleiding

PHP TUIS PHP Inleiding PHP installeer PHP sintaksis PHP opmerkings PHP veranderlikes PHP Echo / Druk PHP datatipes PHP Strings PHP-nommers PHP Wiskunde PHP konstante PHP-operateurs PHP As...Anders...Elseif PHP skakelaar PHP-lusse PHP funksies PHP-skikkings PHP Superglobals PHP RegEx

PHP- vorms

PHP-vormhantering PHP-vorm validering PHP-vorm word vereis PHP-vorm URL/e-pos PHP-vorm voltooi

PHP Gevorderd

PHP datum en tyd PHP sluit in PHP-lêerhantering PHP-lêer oop/lees PHP-lêer skep/skryf PHP-lêer oplaai PHP-koekies PHP-sessies PHP filters PHP-filters Gevorderd PHP-terugbelfunksies PHP JSON PHP-uitsonderings

PHP OOP

PHP Wat is OOP PHP Klasse/Objekte PHP Konstrukteur PHP vernietiger PHP Toegangswysigers PHP erfenis PHP konstante PHP Abstrakte Klasse PHP-koppelvlakke PHP eienskappe PHP statiese metodes PHP Statiese Eienskappe PHP naamruimtes PHP Iterables

MySQL- databasis

MySQL-databasis MySQL Connect MySQL Skep DB MySQL Skep tabel MySQL Voeg data in MySQL Kry Laaste ID MySQL Voeg veelvuldige in MySQL voorberei MySQL Kies Data MySQL Waar MySQL Bestel deur MySQL verwyder data MySQL-opdateringsdata MySQL-limietdata

PHP XML

PHP XML-ontleders PHP SimpleXML-ontleder PHP SimpleXML - Kry PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Intro AJAX PHP AJAX-databasis AJAX XML AJAX Live Search AJAX-peiling

PHP voorbeelde

PHP voorbeelde PHP samesteller PHP vasvra PHP Oefeninge PHP-sertifikaat

PHP- verwysing

PHP Oorsig PHP Skikking PHP-kalender PHP datum PHP gids PHP fout PHP-uitsondering PHP lêerstelsel PHP filter PHP FTP PHP JSON PHP sleutelwoorde PHP Libxml PHP-pos PHP Wiskunde PHP Diverse PHP MySQLi PHP-netwerk PHP-uitsetbeheer PHP RegEx PHP SimpleXML PHP-stroom PHP-string PHP veranderlike hantering PHP XML-ontleder PHP zip PHP Tydsones

PHP MySQL Voorbereide verklarings


Voorbereide stellings is baie nuttig teen SQL-inspuitings.


Voorbereide state en gebonde parameters

'n Voorbereide stelling is 'n kenmerk wat gebruik word om dieselfde (of soortgelyke) SQL-stellings herhaaldelik met hoë doeltreffendheid uit te voer.

Voorbereide stellings werk basies soos volg:

  1. Berei voor: 'n SQL-stellingsjabloon word geskep en na die databasis gestuur. Sekere waardes word ongespesifiseer gelaat, genoem parameters (gemerk "?"). Voorbeeld: VOEG IN IN MyGuests WAARDES (?, ?, ?)
  2. Die databasis ontleed, stel saam en voer navraagoptimalisering op die SQL-stellingsjabloon uit, en stoor die resultaat sonder om dit uit te voer
  3. Voer uit: Op 'n later tydstip bind die toepassing die waardes aan die parameters, en die databasis voer die stelling uit. Die toepassing kan die stelling soveel keer uitvoer as wat dit wil met verskillende waardes

In vergelyking met die direk uitvoer van SQL-stellings, het voorbereide stellings drie hoofvoordele:

  • Voorbereide stellings verminder ontledingstyd aangesien die voorbereiding op die navraag slegs een keer gedoen word (alhoewel die stelling verskeie kere uitgevoer word)
  • Gebonde parameters minimaliseer bandwydte na die bediener aangesien jy elke keer net die parameters hoef te stuur, en nie die hele navraag nie
  • Voorbereide stellings is baie nuttig teen SQL-inspuitings, omdat parameterwaardes, wat later met 'n ander protokol oorgedra word, nie korrek ontsnap hoef te word nie. As die oorspronklike stellingsjabloon nie van eksterne invoer afkomstig is nie, kan SQL-inspuiting nie plaasvind nie.

Voorbereide stellings in MySQLi

Die volgende voorbeeld gebruik voorbereide stellings en gebonde parameters in MySQLi:

Voorbeeld (MySQLi met voorbereide verklarings)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "[email protected]";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?>

Kodereëls om uit die voorbeeld hierbo te verduidelik:

"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"

In ons SQL voeg ons 'n vraagteken (?) in waar ons 'n heelgetal-, string-, dubbel- of blobwaarde wil vervang.

Kyk dan na die bind_param() funksie:

$stmt->bind_param("sss", $firstname, $lastname, $email);

Hierdie funksie bind die parameters aan die SQL-navraag en vertel die databasis wat die parameters is. Die "sss"-argument lys die tipe data wat die parameters is. Die s karakter vertel mysql dat die parameter 'n string is.

Die argument kan een van vier tipes wees:

  • i - heelgetal
  • d - dubbel
  • s - tou
  • b - BLOP

Ons moet een hiervan vir elke parameter hê.

Deur vir mysql te vertel watter tipe data om te verwag, verminder ons die risiko van SQL-inspuitings.

Let wel: As ons enige data van eksterne bronne (soos gebruikersinvoer) wil invoeg, is dit baie belangrik dat die data ontsmet en gevalideer word.



Voorbereide verklarings in BOB

Die volgende voorbeeld gebruik voorbereide stellings en gebonde parameters in PDO:

Voorbeeld (BOB met voorbereide state)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  // prepare sql and bind parameters
  $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
  VALUES (:firstname, :lastname, :email)");
  $stmt->bindParam(':firstname', $firstname);
  $stmt->bindParam(':lastname', $lastname);
  $stmt->bindParam(':email', $email);

  // insert a row
  $firstname = "John";
  $lastname = "Doe";
  $email = "[email protected]";
  $stmt->execute();

  // insert another row
  $firstname = "Mary";
  $lastname = "Moe";
  $email = "[email protected]";
  $stmt->execute();

  // insert another row
  $firstname = "Julie";
  $lastname = "Dooley";
  $email = "[email protected]";
  $stmt->execute();

  echo "New records created successfully";
} catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null;
?>