Mysql
 sql >> Base de données >  >> RDS >> Mysql

Migration PHP de mysql_* vers mysqli_

Ok, donc dans la première fonction que vous essayez de remplacer

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

Commençons par clarifier ce que cela fait :

  • spécifier la requête
  • récupérer le résultat
  • obtenir 0. ligne ("1er" en anglais)
  • obtenir la colonne user_id

Faites maintenant cela étape par étape avec 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'];

Vous n'avez pas besoin de spécifier la ligne comme fetch_assoc renvoie un seul.

Passons maintenant à la deuxième fonction

return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) ==1) ? $user_id : FALSE;
  • spécifier la requête
  • récupérer le résultat
  • obtenir 0. ligne
  • si cela vaut 1 :renvoie user_id , sinon FALSE

Maintenant avec 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;

Mais attendez - pourquoi ai-je utilisé mysqli_fetch_row ici alors que mysqli_fetch_assoc a été utilisé ci-dessus ? RTM ;)

Qu'avons-nous appris aujourd'hui? Ce n'est pas parce que vous pouvez écrire votre code aussi court que possible que vous devriez le faire. Si le code d'origine avait été un peu plus divisé, la transition vers MySQLi aurait dû être assez facile, car vous auriez pu facilement déboguer des parties plus petites au lieu d'une expression complexe.