Looping in php - создание разных номеров рулонов

64
10

Это мой код:

$roll = rand(100,1000000);

$result = mysql_query("SELECT roll FROM users") or die(mysql_error());

if($row["roll"] == $roll) {
$roll = rand(100,1000000);
}
else
{
mysql_query("INSERT INTO users (roll) VALUES('$roll') ") or die(mysql_error());
}

echo "Data Inserted!";

Мой вопрос:

Если номер возобновленного рулона снова равен количеству валиков, уже существующим в базе данных, как он должен снова генерировать новый номер рулона и продолжать проверять его, если он не получит уникальный номер, который я могу окончательно вставить в базу данных? Пожалуйста помоги!

спросил(а) 2021-01-19T16:02:22+03:00 6 месяцев, 1 неделя назад
1
Решение
64

Вы не должны каждый раз загружать ВСЕ ролики. Это просто пустая трата ресурсов. Просто проверьте, существует ли рулон в базе данных, и если да, проверьте новый.

function doesRollExist($roll) {
$sql = "SELECT COUNT(*) FROM users WHERE roll = " . (int)$roll;
$result = mysql_query($sql);
if ($result) {
return ((int)mysql_result($result, 0)) != 0;
}
else {
trigger_error("Query failed: " . mysql_error(), E_USER_ERROR);
}
}

do {
$newRoll = mt_rand(100, 1000000);
}
while (doesRollExist($newRoll));

// Now $newRoll will be a random number that doesn't exist
// in the database.

ответил(а) 2021-01-19T16:02:22+03:00 6 месяцев, 1 неделя назад
45

$roll = rand(100,1000000);

$result = mysql_query("SELECT roll FROM users") or die(mysql_error());

while($row["roll"] == $roll) {
$roll = rand(100,1000000);
}
mysql_query("INSERT INTO users (roll) VALUES('$roll') ") or
die(mysql_error());

echo "Data Inserted!";

ответил(а) 2021-01-19T16:02:22+03:00 6 месяцев, 1 неделя назад
45

вы можете достичь таким образом

$flag=1;
while($flag==1)
{
$roll = rand(100,1000000);

$result = mysql_query("SELECT roll FROM users WHERE roll=$roll") or die(mysql_error());
$row = mysql_fetch_row($result);

if($row[0] == $roll)
{
$roll = rand(100,1000000);
}
else
{
$flag=0;
mysql_query("INSERT INTO users values($roll)") or die(mysql_error());
echo "Data Inserted!";
}

}

ответил(а) 2021-01-19T16:02:22+03:00 6 месяцев, 1 неделя назад
45

Попробуй это:

$count = 1;
while($count > 0) {
$roll = rand(100,1000000);
mysql_query('SELECT COUNT(1) FROM 'users' WHERE roll=' . mysql_real_escape($roll)) or die('Can\'t query the DB server.');
$countRow = mysql_fetch_array($result);
$count = $countRow[0];
}

В реальных ситуациях вы, вероятно, должны добавить лучшую проверку ошибок - с помощью trigger_error или исключений (которые, конечно же, должны быть пойманы). Я бы даже рекомендовал регистрировать все ошибки.

ответил(а) 2021-01-19T16:02:22+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема