PHP从mysql_ *迁移到mysqli_(PHP Migrating from mysql_*

2019-10-19 02:34发布

我只是把一个老项目,我需要做的第一件事就是从迁移mysql_*扩展到mysqli_*之一。 我没有用PHP以前更努力......新代码的作品,但我下面的例子Mosts似乎把事情搞得一团糟......

老功能:

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;
}

我的sanitize功能:

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

Answer 1:

好了,在第一个功能你试图取代

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

让我们先来明确一下这样做:

  • 指定查询
  • 获取结果
  • 得到0行(“第一”,在英语)
  • 获得列user_id

现在做到这一步一步的与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过渡应该是很容易的,因为你可以很容易地调试,而不是一个复杂的表达更小的部分。



文章来源: PHP Migrating from mysql_* to mysqli_
标签: php mysql mysqli