Как получить количество или количество строк в наборе результатов в PHP с использованием подключения ODBC? - PullRequest
4 голосов
/ 07 ноября 2010

Пока я создаю веб-страницу в веб-приложении My PHP, My Connection работает нормально, но когда я хочу получить количество строк оператора SELECT, который я использовал в своем запросе, он дает мне -1 !! хотя мой набор результатов имеет около 10 строк.

Я хотел бы получить фактическое количество строк набора результатов. Я искал руководство по PHP и документацию, но я не нахожу прямой путь, например, функцию Count или что-то в этом роде.

Интересно, нужно ли мне сделать SQL-оператор Count (*) в другом запросе и присоединить его к моему соединению, чтобы получить количество строк?

Кто-нибудь знает простой и прямой способ получить это?

функция odbc_num_rows всегда дает -1 в результате, поэтому я не могу получить фактическое количество строк.

Мой язык программирования - PHP, а My Database Engine - Sybase, а способ подключения к базе данных - ODBC.

Вот код, который я использовал: -

<?PHP

//PHP Code to connect to a certain database using ODBC and getting information from it

//Determining The Database Connection Parameters
$database = 'DatabaseName';
$username = 'UserName';
$password = 'Password';

//Opening the Connection
$conn = odbc_connect($database,$username,$password);

//Checking The Connection
if (!$conn)
{
exit("Connection Failed: " . $conn);
}

//Preparing The Query
$sql = "SELECT * FROM Table1 WHERE Field1='$v_Field1'";

//Executing The Query
$rs = odbc_exec($conn,$sql);

//Checking The Result Set
if (!$rs)
{
exit("Error in SQL");
}

echo "<p align='Center'><h1>The Results</h1></p>";

while ( odbc_fetch_row($rs) )

{
  $field1 = odbc_result($rs,1);
  $field2 = odbc_result($rs,2);
  $field3 = odbc_result($rs,3);
  echo "field1 : " . $field1 ;
  echo "field2 : " . $field2 ;
  echo "field3 : " . $field3 ;
}

$RowNumber = odbc_num_rows($rs);

echo "The Number of Selected Rows = " . $RowsNumber ; 

//Closing The Connection
odbc_close($conn);

?>

Спасибо за вашу помощь:)

Ответы [ 3 ]

8 голосов
/ 07 ноября 2010

odbc_num_rows представляется надежным только для запросов INSERT, UPDATE и DELETE.

В руководстве сказано:

Использование odbc_num_rows () дляопределите число доступных строк после того, как SELECT вернет -1 со многими драйверами.

Один из способов обойти это поведение - вместо этого сделать COUNT(*) в SQL.См. здесь для примера.

3 голосов
/ 11 ноября 2010

На каком основании вы ожидаете, что odbc_num_rows вернет что-либо кроме -1?

У нас есть факт из руководств, что OBDC не поддерживает @@ROWCOUNT / odbc_num_rows. Таким образом, нет никаких оснований ожидать, что он "должен" вернуть что-либо, кроме того, что задокументировано, -1 при любых обстоятельствах.

Даже если бы вы использовали Sybase напрямую (а не через ODBC), у вас возникла бы та же «проблема».

  • odbc_num_rows возвращает @@ROWCOUNT, то есть строки, вставленные / обновленные / удаленные непосредственно предшествующей командой. -1 - правильное документированное значение, если непосредственно предшествующей командой является , а не вставка / обновление / удаление.

  • Это не имеет ничего общего с строками в таблице .

Используйте другой пакет и любой из документированных методов для получения строк в таблице и загрузки значения в переменную:

  • SELECT @Count = COUNT (*) - медленно, требуется ввод / вывод
    или
  • SELECT @Count = ROW_COUNT (db_id, object_id) - очень быстро, нет ввода-вывода

Затем запросите массив результатов, чтобы получить переменную, а не odbc_num_rows, которая будет продолжать возвращать -1.

3 голосов
/ 07 ноября 2010

в php.net:

Простой способ подсчитать строки в наборе результатов odbc, где драйвер возвращает -1, - позволить SQL выполнить работу:

<?php

    $conn = odbc_connect("dsn", "", "");
    $rs = odbc_exec($conn, "SELECT Count(*) AS counter FROM tablename WHERE fieldname='" . $value . "'");
    $arr = odbc_fetch_array($rs);
    echo $arr['counter'];

?>
...