MYSQL Plugin by StrickenKid - HELP
#1

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

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

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
|
Проблема возникла внезапно, раньше такого не замечал, запрос элементарный, в чем дело нихрена не могу понять.
Ерроров от плагина - нет.
Reply
#2

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

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(); 
Результат таков, что запрос знает количество записей в таблице, но все равно выберает только одну, на все итерации.
Reply
#4

Вы понимаете, что вы каждый прогон цикла, в вашем коде, заставили сравнить 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();
Reply
#5

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 при каждой итерации это нерационально, но кажется раньше когда Я пытался решить эту проблему, что то было не так,
Не суть, проблема осталась прежней. Выбирается только одна запись из двух, и прогоняется циклом, задавая везде одинаковые значения.
Reply
#6

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

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


Forum Jump:


Users browsing this thread: 1 Guest(s)