PHP - получить один результат, используя mysqli - PullRequest
2 голосов
/ 16 ноября 2009

Я решил перейти с mysql на mysqli на полпути через проект - и столкнулся с этой ошибкой.

Каков наилучший способ добиться этого: // проверяем, занято ли имя пользователя $ result = mysql_result (mysql_query ("SELECT COUNT (*) ОТ пользователя WHERE username = '". $ username. "'"));

Не могу найти точную версию mysql_result

Я пробовал это:

$ result = mysqli_num_rows ($ db-> query ("SELECT * FROM user WHERE username = '". $ Username. "'")))

Что работает, но я думаю, что использование счетчика будет проще на сервере MySQL. Есть ли лучший способ?

Ответы [ 2 ]

2 голосов
/ 16 ноября 2009

Если вы просто пытаетесь определить, существует ли уже имя пользователя, я могу предложить вам изменить свой запрос на "ВЫБРАТЬ 1 ИЗ ПОЛЬЗОВАТЕЛЯ, ГДЕ username = '". $ username. "'"

$res = $db->query("SELECT 1 FROM user WHERE username='".$username."'");
if (mysqli_num_rows($res) > 0) {
    die('username already taken');
}

Хорошей практикой является также избегать любого пользовательского ввода перед выполнением запросов к базе данных, так как вы широко открыты для атак с использованием SQL-инъекций. Вот безопасная версия:

$res = $db->query("SELECT 1 FROM user WHERE username='". mysqli_real_escape_string($username) ."'");
if (mysqli_num_rows($res) > 0) {
    die('username already taken');
}
1 голос
/ 16 ноября 2009

Убедитесь, что у вас есть индекс таблицы user, который ссылается на столбец username, и все готово. Код, который вы написали, будет работать.

Использование count() не будет иметь значения, поскольку username должно быть уникальным. Если вы убедитесь, что индекс также имеет тип UNIQUE, у вас будет принудительное использование уникальных имен пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...