mysqli, fetch_row и COUNT Я знаю, что туплю, но всё же?

Krishna

Продался Java
mysqli, fetch_row и COUNT Я знаю, что туплю, но всё же?

Есть такая вот табличка:

CREATE TABLE `clicks` (
`id` int(11) NOT NULL auto_increment,
`clicktime` datetime NOT NULL default '0000-00-00 00:00:00',
`clickip` int(11) NOT NULL default '0',
`clickid` int(20) NOT NULL default '0',
`bid` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `clickip` (`clickip`),
KEY `clickid` (`clickid`),
KEY `bid` (`bid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=550 ;

И есть такой вот скрипт:

PHP:
<?php
$host = 'localhost';$user = 'root';$password = '';$db = 'banners';

$conn = new mysqli($host, $user, $password, $db);
$query = "SET NAMES cp1251";
$qres = $conn->query($query);
$query = "SELECT COUNT(clickid) FROM clicks WHERE 1 AND (clicktime BETWEEN '2005-06-26 00:00:00' AND '2005-06-27 00:00:00')";
$qres = $conn->query($query);
if (!$qres) echo $conn->error;
$result = $qres->fetch_row();
echo $result[0];
?>
Он на выходе выдаёт 0, хотя точно такой же!!! Запрос скопированный в phpmyadmin выдает 35. Где копать? Заранее спасибо.

PHP 5.0.4
MySQL 4.1.11
FreeBSD 5.4

-~{}~ 26.06.05 21:40:

P.S. первый раз имею дело с MySQLi, не бейте ногами.

-~{}~ 26.06.05 22:22:

Ладно, бейте! Только скажите где бага Ж)
 

Кром

Новичок
>Он на выходе выдаёт 0, хотя точно такой же!!! Запрос скопированный в phpmyadmin выдает 35. Где копать?

На каком выходе? На
echo $result[0];
Попробуй сделать запрос без всяких объектов. Просто средствами mysqli и посмотреть результат. Похоже, ты просто ввыводишь не то что нужно.
> WHERE 1
Зачем это?
 

Krishna

Продался Java
Кром
Сам запрос правильный. Как я уже говорил я проверял его банальным вводом в phpmyadmin.
Скрипт, который я привел разумеется не боевой. Это просто локализованная проблема, искуственный случай и WHERE 1 - это просто кусок от настоящего скрипта, который я забыл вырезать при составлении этого примера. WHERE 1 используется для того, чтобы использовать запрос в функции, которая принимает через параметры дополнительные условия. Они при не нулл добавляются в строку запроса.

Возвращаясь к теме, я именно хочу научиться использовать объектную реализацию mysqli.
Переучиваюсь на идеологию ООП пятерки :)
Иначе я просто переписал бы с помощью mysql_query и т.д.

-~{}~ 27.06.05 02:11:

P.S. Именно этот мини-скрипт работает неправильно, возвращая ноль. Это чтобы не было подозрений на мою ошибку в данном вопросе.
P.P.S.

$result я выводил с помощью своей функции view_array целиком
он равен array('COUNT(clickid)' => 0)

Похоже, пора писать bug report?
 

Krishna

Продался Java
Так и знал что это спросят =).
Получится тоже самое, но специально для вас сейчас запущу.

-~{}~ 27.06.05 02:35:

PHP:
<?php
$host = 'localhost';$user = 'root';$password = '';$db = 'banners';

$conn = new mysqli($host, $user, $password, $db);
$query = "SET NAMES cp1251";
$qres = $conn->query($query);
$query = "SELECT COUNT(clickid) FROM clicks WHERE 1 AND (clicktime BETWEEN '2005-06-26 00:00:00' AND '2005-06-27 00:00:00')";
$qres = $conn->query($query);
if (!$qres) echo $conn->error;
$result = $qres->fetch_row();
var_dump($result);
?>
array(1) { [0]=> string(1) "0" }

PHP:
<?php
$host = 'localhost';$user = 'root';$password = '';$db = 'banners';

$conn = new mysqli($host, $user, $password, $db);
$query = "SET NAMES cp1251";
$qres = $conn->query($query);
$query = "SELECT COUNT(clickid) FROM clicks WHERE 1 AND (clicktime BETWEEN '2005-06-26 00:00:00' AND '2005-06-27 00:00:00')";
$qres = $conn->query($query);
if (!$qres) echo $conn->error;
$result = $qres->fetch_row();
print_r($result);
?>

Array ( [0] => 0 )
P.S.
Рву на себе волосы за небольшую неточность:

$result я выводил с помощью своей функции view_array целиком
он равен array('COUNT(clickid)' => 0)
Это было при $qres->fetch_assoc

-~{}~ 27.06.05 03:42:

Всем спасибо, модераторам просьба тему закрыть :)
Банальная невнимательность, залил несвежие данные в таблицу.
Прошу прощения за отнятое время.
П.С.
Иногда полезно нажаловаться, чтобы самому взглянуть на проблему свежим взглядом ;)
 
Сверху