2013-06-04 15 views
9

La mia domanda è abbastanza semplice: è possibile utilizzare store_result() e bind_result() con PDO PHP?È possibile utilizzare store_result() e bind_result() con PDO PHP?

Ecco qualche esempio di codice mi sono imbattuto:

$stmt = $mysqli->prepare("SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1")) { 
    $stmt->bind_param('s', $email); // Bind "$email" to parameter. 
    $stmt->execute(); // Execute the prepared query. 
    $stmt->store_result(); 
    $stmt->bind_result($user_id, $username, $db_password, $salt); // get variables from result. 
    $stmt->fetch(); 

ho visto questi utilizzati nel contesto di mysqli, ma non con PHP DOP. store_result() e bind_result() sono indicati in mysqli su www.php.net. Sono curioso di sapere se sono validi o se esistono metodi comparabili.

Modifica: Ovviamente c'è una traduzione tra i due metodi. La mia ipotesi è che store_result e bind_result() siano simili ai comandi del PDO.

risposta

9

L' point is, non è assolutamente necessario utilizzare né store_result() né bind_result() con PDO.
Ottieni i tuoi dati e utilizzali ovunque desideri. Questo è il vero punto di DOP.

$sql = "SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(array($email)); 
$row = $stmt->fetch(); 

Ora sono disponibili i dati utente nell'array $row.

Memorizzare la riga risultante in variabili separate è molto pratica raramente al giorno d'oggi. Ma se si preferisce un modo così antico di trattare i dati, è possibile aggiungere

extract($row); 

al codice precedente per ottenere le variabili globali.

Il problema principale con mysqli-way è che è estremamente difficile utilizzarlo con qualsiasi livello di astrazione.

Nella vita reale abbiamo mai bando di database nella ambito globale, ma piuttosto in una funzione come questa

function getUserData() { 
    // getting data 
    return $array; 
} 

e per qualche motivo questo codice ancora più utilizzato semplice diventato estremamente difficile con mySQLi! Nella vita reale non abbiamo bisogno di variabili separate ma piuttosto di un singolo array da restituire. Ma con mysqli dobbiamo prima ottenere queste variabili, poi inserirle nell'array e solo poi restituirle. Semplicemente pazzo!

+0

Questo è un buon punto. L'ho trovato strano, dal momento che ho usato esclusivamente PDO. Sembravano più passi di quelli che ho implementato in passato. – Mlagma

2

anziché store_result e bind_result; è possibile utilizzare il linguaggio costrutto list. Un esempio d'uso è:

$stmt = $pdo->prepare("SELECT id, username, password, salt 
    FROM members 
    WHERE email = ? 
    LIMIT 1") 
$stmt->bindValue(1, $email, PDO::PARAM_STR); 
$stmt->execute(); 
list($user_id, $username, $db_password, $salt) = $stmt->fetch(PDO::FETCH_NUM); 

Il PDO::FETCH_NUM viene utilizzato perché:

list() funziona solo su array numerici e assume le numerici indici partono da 0.

1

È possibile e ho utilizzato di recente nel mio progetto.

$prep_stmt = "SELECT id FROM member WHERE username = ? LIMIT 1"; 
$stmt = $mysqli->prepare($prep_stmt); 

if ($stmt) 
{ 
    $stmt->bindparam(1, $username); 
    $stmt->execute(); 
    $result=$stmt->fetchALL(PDO::FETCH_OBJ); 
} 
if ($stmt->rowCount() == 1) 
{ 
    echo"user exist"; 
    $stmt->close(); 
}