Mysql
 sql >> Database >  >> RDS >> Mysql

PHP Migrazione da mysql_* a mysqli_

Ok, quindi nella prima funzione stai cercando di sostituire

return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'"), 0, 'user_id');

Per prima cosa chiariamo cosa fa:

  • specifica la query
  • recupera il risultato
  • ottieni 0. riga ("1st" in inglese)
  • ottieni la colonna user_id

Ora esegui questa operazione passo dopo passo con mysqli_ :

//specify query
$result = mysqli_query(connect(),"SELECT `user_id` FROM `users` WHERE `username` = '$username'");
//fetch result
$row = mysqli_fetch_assoc($result);
//get column
return $row['user_id'];

Non è necessario specificare la riga come fetch_assoc ne restituisce solo uno.

Ora per la seconda funzione

return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) ==1) ? $user_id : FALSE;
  • specifica la query
  • Recupera il risultato
  • ottieni 0. riga
  • se questo è uguale a 1:restituisce user_id , altrimenti FALSE

Ora con mysqli_ :

//specify query
$result = mysqli_query(connect(),"SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'");
//fetch result
$row = mysqli_fetch_row($result);
//if first returned column is equal to 1 return $user_id
//otherwise FALSE
return ($row[0]==1) ? $user_id : FALSE;

Ma aspetta, perché ho usato mysqli_fetch_row qui mentre mysqli_fetch_assoc è stato usato sopra? RTM;)

Cosa abbiamo imparato oggi? Solo perché puoi scrivere il tuo codice il più breve possibile non significa che dovresti. Se il codice originale fosse stato suddiviso un po' di più, la transizione a MySQLi sarebbe stata abbastanza semplice, poiché avresti potuto facilmente eseguire il debug di parti più piccole invece di un'espressione complessa.