簡體   English   中英

PHP從mysql_ *遷移到mysqli_

[英]PHP Migrating from mysql_* to mysqli_

我只是承擔了一個老項目,而我要做的第一件事是從mysql_*擴展名遷移到mysqli_*一個。 我之前還沒有使用過PHP。大多數新代碼都可以使用,但是在下面的示例中,我似乎把事情搞砸了...

舊功能:

function user_id_from_username($username) {
    $username = sanitize($username);
    return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'"), 0, 'user_id');
}

新增(無工作)功能:

function user_id_from_username($username) {
    $username = sanitize($username);
    $id = mysqli_query(connect(),"SELECT `user_id` FROM `users` WHERE `username` = '$username'");
    return $id;
}

另一個舊的:

function login($username, $password) {
    $user_id = user_id_from_username($username);

    $username = sanitize($username);
    $password = md5($password);

    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) ==1) ? $user_id : FALSE;
}

和新的:

function login($username, $password) {
    $user_id = user_id_from_username($username);

    $username = sanitize($username);
    $password = md5($password);

    $check = mysqli_query(connect(),"SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'");
    return $check == $user_id ? TRUE : FALSE;
}

我的消毒功能:

function sanitize($data) {
    return htmlentities(strip_tags(mysqli_real_escape_string(connect(), $data)));
}

好的,所以在第一個功能中,您嘗試替換

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

首先讓我們弄清楚它的作用:

  • 指定查詢
  • 獲取結果
  • 得到0。行(英語中為“ 1st”)
  • 獲取列user_id

現在,使用mysqli_逐步進行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'];

您無需指定該行,因為fetch_assoc僅返回一個。


現在是第二個功能

return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) ==1) ? $user_id : FALSE;
  • 指定查詢
  • 取得結果
  • 得到0。行
  • 如果等於1:返回user_id ,否則返回FALSE

現在使用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;

但等待-為什么我用mysqli_fetch_row這里,而mysqli_fetch_assoc上面使用? RTM;)


今天我們學到了什么? 僅因為您可以編寫盡可能短的代碼並不意味着您應該這樣做。 如果對原始代碼進行了更多拆分,則向MySQLi的過渡應該非常容易,因為您可以輕松調試較小的部分,而不是復雜的表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM