sql >> Databáze >  >> RDS >> Mysql

PHP Migrace z mysql_* na mysqli_

Dobře, takže v první funkci, kterou se pokoušíte nahradit

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

Nejprve si ujasněme, co to dělá:

  • zadejte dotaz
  • načtěte výsledek
  • získejte 0. řádek („1st“ v angličtině)
  • získat sloupec user_id

Nyní to proveďte krok za krokem pomocí 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'];

Řádek nemusíte zadávat jako fetch_assoc vrátí pouze jeden.

Nyní k druhé funkci

return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) ==1) ? $user_id : FALSE;
  • zadejte dotaz
  • načíst výsledek
  • získáte 0. řádek
  • pokud se rovná 1:vraťte user_id , jinak FALSE

Nyní s 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;

Ale počkat – proč jsem použil mysqli_fetch_row zde, zatímco mysqli_fetch_assoc byl použit výše? RTM;)

Co jsme se dnes naučili? To, že můžete napsat svůj kód co nejkratší, neznamená, že byste měli. Pokud by byl původní kód trochu více rozdělen, přechod na MySQLi by měl být docela snadný, protože jste mohli snadno odladit menší části namísto složitého výrazu.




  1. Ovladač PostgreSQL JDBC nefunguje pro připojení Heroku DB

  2. Existuje způsob, jak vypočítat opakující se výpočty pouze jednou v SQL?

  3. Konverzní tabulka z MyISAM na INNODB

  4. Použití cizích klíčů k nahrazení kontrolního omezení