SA-MP Forums Archive
MYSQL Plugin by StrickenKid - HELP - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: MYSQL Plugin by StrickenKid - HELP (/showthread.php?tid=428901)



MYSQL Plugin by StrickenKid - HELP - NameNone - 07.04.2013

Отправляю запрос с целью получить все записи из таблицы, но получаю только одну запись из всех, и это при том, что запрос видит, что в таблице более одной записи, и все равно возвращает только одну.

Набросал для примера:

PHP код:
new query[27], str[26];
format(querysizeof(query), "SELECT * FROM Test");
mysql_query(query);
mysql_store_result();
mysql_fetch_row(str);
printf("Записей: %d | %s"mysql_num_rows(), str); 
Результат:
PHP код:
Записей1|//  1 - ID записи. 
В итоге получается так, что алгоритм прогоняет получение данных из запроса по количеству полученных записей, все они получаются одинаковыми.

PHP код:
1|0
1
|
При условии, что записи в таблице имеют следующий вид:
PHP код:
1|
2
|
Проблема возникла внезапно, раньше такого не замечал, запрос элементарный, в чем дело нихрена не могу понять.
Ерроров от плагина - нет.


Re: MYSQL Plugin by StrickenKid - HELP - eakwarp - 07.04.2013

Сначала узнаете количество записей, и записываете его в переменную, потом уже делаете mysql_fetch_row(str), все просто


Re: MYSQL Plugin by StrickenKid - HELP - NameNone - 07.04.2013

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
Сначала узнаете количество записей, и записываете его в переменную, потом уже делаете mysql_fetch_row(str), все просто
В том и то и дело, что все просто, и в тоже время все становится сложным.

Попробую дать более детальное объяснение.
Допустим алгоритм имеет следующий вид:

PHP код:
format(querysizeof(query), "SELECT * FROM Tests");
mysql_query(query);
mysql_store_result();
if(
mysql_num_rows() > 0)
{
for(new 
0mysql_num_rows(); i++)
{
mysql_fetch_field("ID"Field); result[i] = strval(Field)
}
}
mysql_free_result(); 
Результат таков, что запрос знает количество записей в таблице, но все равно выберает только одну, на все итерации.


Re: MYSQL Plugin by StrickenKid - HELP - eakwarp - 07.04.2013

Вы понимаете, что вы каждый прогон цикла, в вашем коде, заставили сравнить i с функцией?) Может все таки стоит сделать так?

format(query, sizeof(query), "SELECT * FROM Tests");
mysql_query(query);
mysql_store_result();
new rows=mysql_num_rows();
if(rows > 0)
{
for(new i = 0; i < rows; i++)
{
mysql_fetch_field("ID", Field); result[i] = strval(Field)
}
}
mysql_free_result();

Или вот так:

format(query, sizeof(query), "SELECT * FROM Tests");
mysql_query(query);
mysql_store_result();
new rows=mysql_num_rows();
if(rows > 0)
{
new i=0;
while(mysql_fetch_field("ID", Field))
{
result[i] = strval(Field);
i++;
}
}
mysql_free_result();


Re: MYSQL Plugin by StrickenKid - HELP - NameNone - 07.04.2013

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
Вы понимаете, что вы каждый прогон цикла, в вашем коде, заставили сравнить i с функцией?) Может все таки стоит сделать так?

format(query, sizeof(query), "SELECT * FROM Tests");
mysql_query(query);
mysql_store_result();
new rows=mysql_num_rows();
if(rows > 0)
{
for(new i = 0; i < rows; i++)
{
mysql_fetch_field("ID", Field); result[i] = strval(Field)
}
}
mysql_free_result();

Или вот так:

format(query, sizeof(query), "SELECT * FROM Tests");
mysql_query(query);
mysql_store_result();
new rows=mysql_num_rows();
if(rows > 0)
{
new i=0;
while(mysql_fetch_field("ID", Field))
{
result[i] = strval(Field);
i++;
}
}
mysql_free_result();
Я понимаю, что постоянный вызов num_rows при каждой итерации это нерационально, но кажется раньше когда Я пытался решить эту проблему, что то было не так,
Не суть, проблема осталась прежней. Выбирается только одна запись из двух, и прогоняется циклом, задавая везде одинаковые значения.


Re: MYSQL Plugin by StrickenKid - HELP - eakwarp - 07.04.2013

Так правильно, вы используете mysql_fetch_field(), т.е. вы получаете следующее значение из ЭТОЙ строки, а не из следующей. Что бы построчно получить строчки, используйте mysql_fetch_row(). )


Re: MYSQL Plugin by StrickenKid - HELP - NameNone - 07.04.2013

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
Так правильно, вы используете mysql_fetch_field(), т.е. вы получаете следующее значение из ЭТОЙ строки, а не из следующей. Что бы построчно получить строчки, используйте mysql_fetch_row(). )
Ух ты, вот кретин, искал ошибку а она передо мной. Просто, хотел проверить полный результат запроса, используя mysql_fetch_row, и забыл что она возвращает по одной строке за вызов, а не все сразу.
Дальше сам, спасибо, большое. )