2013-12-07 5 views
1

Я просто взял старый проект, и первое, что мне нужно было сделать, это перейти от расширения mysql_* к mysqli_*. Я не работал с PHP гораздо раньше ... Моста нового кода работает, но в примерах ниже я, кажется, натворить ...PHP Перенос с mysql_ * на mysqli_

Старая функция:

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))); 
} 
+3

Какие сообщения об ошибках вы получаете? – thatonefreeman

+2

Нет никакого эквивалента для 'mysql_result' в' mysqli', [но вы можете написать один] (http://php.net/mysqli_result#109782) – Wrikken

+0

@thatonefreeman У меня нет никаких ... – Abbe

ответ

5

Итак, в первой функции вы пытаетесь заменить

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

Давайте сначала ясно, что это делает:

  • задать запрос
  • получить результат
  • получить 0. строку ("1-й" на английском языке)
  • получить колонку 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 должен был быть довольно простым, так как вы могли бы легко отлаживать меньшие части вместо сложного выражения.

+0

это работает :-), и я думаю, что у меня все получилось ... – Abbe

Смежные вопросы