PHP MySQL, пока цикл - PullRequest
       1

PHP MySQL, пока цикл

2 голосов
/ 02 апреля 2011

Почему этот код не работает?

Создает случайное число, если оно существует в базе данных, то оно генерирует новое, пока не сможет вставить его в уникальный ключ, если нет, то сразу вставит в базу данных.* Причина, по которой mt_rand является низкой для целей тестирования.

Ответы [ 4 ]

2 голосов
/ 02 апреля 2011

Это потому, что вы на самом деле не запускаете запрос MySQL. У вас просто есть строка запроса как таковая. Вы должны передать строку mysql_query (..). Получите ресурс, а затем проверьте окончательное количество строк.

Метод № 1: (изменение вашего кода)

$id;$count;
do {
    $id = mt_rand(1, 10);
    $res = mysql_query("SELECT count(*) as c FROM accounts WHERE id = '$id'");
    $row = mysql_fetch_array($res);
    $count = $row['c'];
} while ($count != 0);

$sql = "INSERT INTO accounts ...";
//..

Метод № 2:

  • Измените таблицу MySQL, используйте auto_increment. Создайте таблицу таким образом
  • create table myTABLE (
        id integer aut_increment,
        username varchar(128),
        email varchar(128),
        ..
        primary key(id)
    );
1 голос
/ 02 апреля 2011

Почему вы собираетесь создать идентификатор с помощью этого метода? Почему бы вам просто не использовать автоинкрементный идентификатор?

CREATE TABLE accounts (
     id INT NOT NULL AUTO_INCREMENT,
)

Генерация идентификатора с использованием mt_rand не имеет большого смысла и будет невероятно дорогой, если учесть больше учетных записей.

0 голосов
/ 02 апреля 2011

Несколько вещей

  1. Он не использует mysql_query.
  2. Не извлекается результат запроса (который не существует)
  3. count - это встроенный метод PHP, а не число.
  4. У вас не должно быть столько обращений к базе данных (это очень плохая идея для генерации случайного идентификатора таким образом)
0 голосов
/ 02 апреля 2011

Эээ ... кажется, в этом коде есть небольшие проблемы:

$id;
do {
    $id = mt_rand(1, 10);
    $c=mysql_query('SELECT id FROM accounts WHERE id = '.$id.' LIMIT 1;');
}while(mysql_num_rows($c)!=0);

P.S. Вы должны рассмотреть: uniqid в руководстве по PHP и автоматическое увеличение поля sql

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