2013-04-25 11 views
5

Attualmente sto usando il codice deprecato per ottenere i dati degli utenti, come segue:Come aggiornare da mysql_ * a mysqli_ *?

/* retrieve */ 
$lastName = $_POST['lastName']; 
$firstName = $_POST['firstName']; 
$examLevel=$_POST['level']; 

/* connect */ 
$dbc=mysql_connect("localhost", "user", "passw") or die('Error connecting to MySQL server'); 
mysql_select_db("db") or die('Error selecting database.'); 

/* sanitize */ 
$lastName=mysql_real_escape_string($lastName); 
$firstName=mysql_real_escape_string($firstName); 
$examLevel=mysql_real_escape_string($examLevel); 


/* insert */ 
$query_personal = "INSERT INTO personal (LastName, FirstName) VALUES ('$lastName', '$firstName')"; 

$query_exam = "INSERT INTO exam (Level, Centre, BackupCentre, etc.) VALUES ('$examLevel', '$centre', '$backup', 'etc')"; 

Questo è il lavoro ma io continuo imbattersi avvertenze circa la sicurezza e la mancanza di sostegno. C'è una piccola riscrittura a connect con mysqli invece di mysql ma che dire di mysqli_real_escape_string? L'ho visto usato negli esempi, ma ho anche visto consigli per usare invece istruzioni preparate che non usano mysqli_real_escape_string.

E come utilizzerei le istruzioni preparate per INSERIRE i miei dati? Sono un po 'in mare con questo po' finora. Ad esempio, il collegamento dei parametri è valido solo per INSERT e binding dei risultati solo per SELECT?

+0

Siamo spiacenti, non ha potuto ottenere il codice di formattazione destra . – Benjamin

+0

Cosa c'è di così difficile nel contrassegnare tutto il codice e fare clic su '{}'? – Barmar

+0

Mi chiedo è un record per essere patrocinato qui? 2min 35sec. Proverò a farcela! – Benjamin

risposta

0

Convertire a PDO

/* connect */ 
$dsn = "mysql:host=localhost;db=test;charset=utf8"; 
$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
); 
$pdo = new PDO($dsn,"user", "passw", $opt); 


/* insert */ 
$query = "INSERT INTO personal (LastName, FirstName) VALUES (?, ?)"; 
$stmt = $pdo->prepare($query); 
$stmt->execute(array($_POST['lastName'],$_POST['firstName'])); 

$query = "INSERT INTO exam (Level, Centre, BackupCentre, etc) VALUES (?, ?, ?, 'etc')"; 
$stmt = $pdo->prepare($query); 
$stmt->execute(array($_POST['level'], $centre, $backup)); 
+0

Grazie, YCS! Ora che sto saltando su PDO studierò attentamente la tua risposta. – Benjamin

0

vedere queste pagine per MySQL conversione in mysqli

Converting_to_MySQLi

https://wikis.oracle.com/display/mysql/Converting+to+MySQLi

e vedere mysqli_real_escape_string manuale che spiegano circa mysqli_real_escape_string e problemi di sicurezza e come risolverlo.

php.net:

Sicurezza: il set di caratteri

Il set di caratteri deve essere impostato sia a livello di server, o con la funzione API mysqli_set_charset() per poter incidere mysqli_real_escape_string(). Vedere la sezione concetti su character sets per ulteriori informazioni.

vedere questa pagina per query per insert data

vedere questa pagina per prepare data for inserting to mysql

e http://php.net/manual/de/mysqli.quickstart.prepared-statements.php

Problemi correlati