ive попытался напрасно потратить много времени, чтобы преобразовать эту строку из mysql в mysqli без везения. вот что я имел для mysql:
function user_exists($username) { $username = sanitize($username); $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'"); return (mysql_result($query, 0) == 1) ? true : false; }
я пробовал:
function user_exists($username) { $link = mysqli_connect("localhost", "username", "password", "table"); $username = sanitize($username); $usernamequery = "SELECT COUNT(`userid`) FROM `table` WHERE `username` = '$username' "; $query = mysqli_query($link, $usernamequery); $queryarray = mysqli_fetch_array($query, MYSQLI_BOTH); $queryarrayres = mysqli_num_rows($query) ; if ($queryarrayres > 0) { true; } else { false;} }
многочисленные хиты этой проблемы здесь от предыдущих пользователей, но никто из них, похоже, не работает для меня. это и это, например. все кажется прекрасным до тех пор, пока я не перейду к запросу mysql_result и не разобьется. Я понимаю, что mysql_result в приведенной выше ситуации, по сути, проверяет, выбрана ли одна строка, и что она равна единице, то есть присутствует, но я просто не могу получить что-то эквивалентное в mysqli.
function login($username, $password) { $link = mysqli_connect("localhost", "username", "pw", "db"); $username = sanitize($username); $password = md5($password); $loginquery = "SELECT COUNT(`user_id`) FROM `users` WHERE `username` = $username AND `password` = $password"; $query = mysqli_query($link, $loginquery); $queryarray = mysqli_fetch_array($query); $queryarrayres = $queryarray[0]; return ($queryarrayres > 0)? $userid :false; }
в этом случае $ queryarrayres печатает как 1 в нужном случае и нулевое остальное. так что бит работает. функция также содержит элемент пароля, который добавлен ive.
К сожалению, когда я использую функцию, она постоянно возвращает false. я тестировал на тестовой странице, и если я изменяю $ username и $ password на абсолютную переменную, похоже, это работает. код идентичен между старой версией (не показан) и этой версией, кроме очевидных обновлений mysqli. это сужает проблему до трех возможностей. 1) что-то общее с именем $ username и $ password. 2) строку $ usernamequery. 3) возврат функции. Я считаю, что его три, что никакой другой код не изменился, но я не могу сказать, что происходит здесь.
Используйте эту функцию ниже, она работает
function user_id_from_username ($username){ global $connect; $username = sanitize($username); $query = " SELECT user_id FROM users WHERE username = '$username' "; $result = mysqli_query($connect, $query); $row = mysqli_fetch_array($result, MYSQLI_ASSOC); echo $row["user_id"]; }
Ваша новая функция user_exists ничего не возвращает.
изменение
if ($queryarrayres > 0) { true; } else { false;}
в
return ($queryarrayres > 0)?true:false;
Вы можете использовать следующую функцию и вызвать функцию
function mysqli_result($res, $row, $field=0) { $res->data_seek($row); $datarow = $res->fetch_array(); return $datarow[$field]; }