// проверяем пуста ли таблица, если да то вернет TRUE, если нет, то FALSE
private function isEmpty($tableName)
{
if (self::$NAMES) echo __METHOD__;
if ($result = $this->mysqli->prepare("SELECT COUNT(*) FROM ?"))
{
$result->bind_param("s",$tableName);
$result->execute();
$row_cnt = $result->num_rows;
if (empty($row_cnt))
{
return TRUE;
}
else
{
return FALSE;
}
}
}
Как я понимаю, этот вариант не срабатывает почему-то, может лучше воспользоваться предикатом SQL EXISTS, только как это сделать в MySQLi никто не подскажет?
Спустя 2 часа, 43 минуты, 54 секунды (9.06.2012 - 12:08) T1grOK написал(а):
Опять та же ошибка. $result - экземпляр класса mysqli_stmt и он не содержит свойства num_rows. execute() возвращает экземпляр класса mysqli_result, num_rows является одним из его свойств.
Нет php.net не работает.
$result->bind_param("s",$tableName);
$res = $result->execute();
$row_cnt = $res->num_rows;
Нет php.net не работает.
Спустя 2 минуты, 54 секунды (9.06.2012 - 12:11) Stasonix написал(а):
иии? Да без php.net стремно чето. Я не вижу примеров (вообще где-нть), не могу решить эту задачу, как это ни печально звучит.
Спустя 15 минут, 31 секунда (9.06.2012 - 12:27) Stasonix написал(а):
Ладно, все, отставить. Мой бедный мозк нашел решение ==>
и усё.
$mysqli = new mysqli("localhost","root","","mydb");
if ($result = $mysqli->query("SELECT * FROM `table` LIMIT 1"))
{
if ($obj = $result->fetch_object())
{
echo "NOT EMPTY";
}
else
{
echo "empty";
}
$result->close();
}
$mysqli->close();
и усё.
Спустя 53 минуты, 7 секунд (9.06.2012 - 13:20) T1grOK написал(а):
Гоню. С prepare немного не так
$result->bind_param("s",$tableName);
$result->execute();
$result->store_result();
$row_cnt = $result->num_rows;
Спустя 1 минута, 34 секунды (9.06.2012 - 13:21) T1grOK написал(а):
Вот только сомневаюсь, что без названия таблицы prepare сработает.
Спустя 5 минут, 44 секунды (9.06.2012 - 13:27) Stasonix написал(а):
я думаю не стоит имя таблицы prepare'ить, можно просто сразу в запрос переменную вбить, но кто знает... а вдруг кому-то понадобиться имя таблицы со стороны клиента получить, тогда конечно надо тестить, но для меня не актуально уже. Вам слово (если получится, если нет, сам протестю, только позже).