2013-03-29 2 views
1

У меня возникло сообщение об ошибке SQL при активации правила с некоторой проверкой Php. Целью этого правила является проверка того, проголосовал ли пользователь более 2 раз за последние 24 часа. Вот код, который я использовал:Ошибка SQL в Php Drupal Код правила - ограничение количества голосов в день

// Configure your settings: 
$daily_limit = 2; 
$content_type = 'node'; 
$day = strtotime(date('Y-m-d'))-1; 

// Load the active user account 
global $user; 

// Drupal has a security feature called the Database Abstraction Layer. 
// You have to build DB queries with variables that are defined in an array. 
// Define the query string, where ":drupaluid" etc. are arbitrary placeholders 

$query = 'SELECT * FROM votingapi_vote WHERE uid=:drupaluid AND content_type=:drupaltype AND timestamp > :day'; 

// Define each placeholder 
$variables = array(':drupaluid' => $user->uid, ':drupaltype' => $content_type, ':day' => $day); 

// Query the Drupal database 
$result = db_query($query, $variables); 

// Count the number of rows returned from the Drupal database 
// From: http://api.drupal.org/api/drupal/includes%21database%21database.inc/function/db_query/7 
$nodecount = $result->rowCount(); 

// Set the flag as to whether this Rule is effective or not 
if ($nodecount >= $daily_limit) { 
    return TRUE; // You will be over the accepted quota 
} else { 
    return FALSE; // Still got room. Allow the new node. 
} 

Я пытался отладить запрос, но даже простой запрос, как $query = 'SELECT * FROM votingapi_vote WHERE uid = 1 не работает в Php, тогда как Он работает в тузде консоли. Кто-нибудь видит эту ошибку?

+1

Что означает «не работает»? Каково было сообщение об ошибке? –

ответ

0

DatabaseStatementInterface::rowCount специально возвращает

Количество строк, затронутых последней DELETE, INSERT или UPDATE заявление выполняется.

Он не используется для получения отсчета результата. Для этого используйте запрос подсчета или просто используйте функции PHP.

$result = db_query($query, $variables)->fetchAll(); 

$nodecount = count($result);