sql >> Databasteknik >  >> RDS >> Mysql

PHP Migrerar från mysql_* till mysqli_

Ok, så i den första funktionen försöker du ersätta

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

Låt oss först klargöra vad detta gör:

  • ange fråga
  • hämta resultatet
  • få 0. rad ("första" på engelska)
  • hämta kolumnen user_id

Gör nu detta steg-för-steg med 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'];

Du behöver inte ange raden som fetch_assoc returnerar endast en.

Nu till den andra funktionen

return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) ==1) ? $user_id : FALSE;
  • ange fråga
  • hämta resultat
  • få 0. rad
  • om detta är lika med 1:returnera user_id , annars FALSE

Nu med 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;

Men vänta - varför använde jag mysqli_fetch_row här medan mysqli_fetch_assoc användes ovan? RTM;)

Vad har vi lärt oss idag? Bara för att du kan skriva din kod så kort som möjligt betyder det inte att du borde. Om den ursprungliga koden hade splittrats upp lite mer borde övergången till MySQLi ha varit ganska enkel, eftersom du enkelt kunde ha felsökt mindre delar istället för ett komplext uttryck.




  1. Returnera poster distinkta i en kolumn men sorteras efter en annan kolumn

  2. Att utföra en vänsterkoppling över ett många-till-många-bord med villkor

  3. Subtraktion i sql-satsen

  4. Operand bör innehålla 1 kolumn - MySQL NOT IN