User login

DBTNG

Beware of transactions in Drupal 7

Drupal 7's database layer makes use of transactions in several places. Be careful when you expect to see the results of node_save() outside of the scope of the current request. If someone accesses your website data before the transaction has been committed, the results of queries executed within are not visible. Either all queries succeed or nothing happens at all in a database transactions.

hook_module_implements_alter called before schema is installed

I thought .module files were not supposed to be loaded and available until after .install files were run, but whatever is the intention, it is absolutely certain that at least this hook can be implemented before the module is truly installed.

Check if a given uid has a given permission (a query to avoid user_load)

a good D7 query for determining if a user has a specific permission
via agentrickard

what's wrong with user_access('permission', $account) ?

it requires a user_load_multiple() (a user_load to get the roles on the account, turning in the ID is not enough)

which is wasteful if you can do it at the query level

you could see what queries that function runs

it seems like that is a somewhat complicated thing to work out
since users can belong to many roles

how many users is this for at a time? I'd just use user_load() + user_access().

Must use ->fields() method in select statements in Drupal 7 database layer (DBTNG)

An error like this one:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM block block WHERE (theme = 'bartik')' at line 1: SELECT FROM {block} block WHERE (theme = :db_condition_placeholder_0) ; Array ( [:db_condition_placeholder_0] => bartik ) in xray_block_statistics() (line 80 of /home/ben/workspace/dgd7all/sites/default/modules/xray/xray.module).

Stumbling through DBTNG, Drupal 7's new database layer

Order matters. condition() before countQuery()

This fails (note it trying to do a subquery):

<?php
return db_select('block')->countQuery()->condition('theme', $theme)->execute()->fetchField();
?>

Syndicate content