[英]PHP Migrating from mysql_* to mysqli_
I just took up a old project and the first thing I needed to do was to migrate from the mysql_*
extension to the mysqli_*
one. 我只是承担了一个老项目,而我要做的第一件事是从
mysql_*
扩展名迁移到mysqli_*
一个。 I haven't worked with PHP much before... Mosts of the new code works but in the examples below I seems to mess things up... 我之前还没有使用过PHP。大多数新代码都可以使用,但是在下面的示例中,我似乎把事情搞砸了...
Old function: 旧功能:
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');
}
New(none working) function: 新增(无工作)功能:
function user_id_from_username($username) {
$username = sanitize($username);
$id = mysqli_query(connect(),"SELECT `user_id` FROM `users` WHERE `username` = '$username'");
return $id;
}
Another old one: 另一个旧的:
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;
}
And the new one: 和新的:
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;
}
My sanitize Function: 我的消毒功能:
function sanitize($data) {
return htmlentities(strip_tags(mysqli_real_escape_string(connect(), $data)));
}
Ok, so in the first function you are trying to replace 好的,所以在第一个功能中,您尝试替换
return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'"), 0, 'user_id');
Let's first make clear what this does: 首先让我们弄清楚它的作用:
user_id
user_id
Now do this step-by-step with mysqli_
: 现在,使用
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'];
You don't need to specify the row as fetch_assoc
returns only one. 您无需指定该行,因为
fetch_assoc
仅返回一个。
Now for the second function 现在是第二个功能
return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) ==1) ? $user_id : FALSE;
user_id
, otherwise FALSE
user_id
,否则返回FALSE
Now with mysqli_
: 现在使用
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;
But wait - why did I use mysqli_fetch_row
here whereas mysqli_fetch_assoc
was used above? 但等待-为什么我用
mysqli_fetch_row
这里,而mysqli_fetch_assoc
上面使用? RTM ;) RTM;)
What have we learned today? 今天我们学到了什么? Only because you can write your code as short as possible doesn't mean you should.
仅因为您可以编写尽可能短的代码并不意味着您应该这样做。 If the original code had been split up a bit more, the transition to MySQLi should have been quite easy, as you could have easily debugged smaller parts instead of a complex expression.
如果对原始代码进行了更多拆分,则向MySQLi的过渡应该非常容易,因为您可以轻松调试较小的部分,而不是复杂的表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.