MYSQL Plugin by StrickenKid - HELP -
NameNone - 07.04.2013
Отправляю запрос с целью получить все записи из таблицы, но получаю только одну запись из всех, и это при том, что запрос видит, что в таблице более одной записи, и все равно возвращает только одну.
Набросал для примера:
PHP код:
new query[27], str[26];
format(query, sizeof(query), "SELECT * FROM Test");
mysql_query(query);
mysql_store_result();
mysql_fetch_row(str);
printf("Записей: %d | %s", mysql_num_rows(), str);
Результат:
PHP код:
Записей: 2 | 1|0 // 1 - ID записи.
В итоге получается так, что алгоритм прогоняет получение данных из запроса по количеству полученных записей, все они получаются одинаковыми.
При условии, что записи в таблице имеют следующий вид:
Проблема возникла внезапно, раньше такого не замечал, запрос элементарный, в чем дело нихрена не могу понять.
Ерроров от плагина - нет.
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(query, sizeof(query), "SELECT * FROM Tests");
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() > 0)
{
for(new i = 0; i < mysql_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, и забыл что она возвращает по одной строке за вызов, а не все сразу.
Дальше сам, спасибо, большое. )