I'm trying to use either db_select or db_query with a join in Drupal 7, but not having luck.

The query I'm trying to run is:

SELECT floormap_counter_expected.counter_name, tls_connect_agent_counters.counter_stage,tls_connect_agent_counters.applicant_gwf, tls_connect_agent_counters.counter_ip, floormap_counter_expected.expected FROM tls_connect_agent_counters INNER JOIN floormap_counter_expected ON floormap_counter_expected.counter_name = tls_connect_agent_counters.counter_name;

When passed to mysql via the command line, the information I am wanting is returned without a problem.

when I try db_select:

$get_counter_info = db_select('tls_connect_agent_counters', 't');
      $get_counter_info->fields('t', array('counter_stage', 'applicant_gwf', 'counter_ip'));
      $get_counter_info->fields('n', array('expected'));
      $get_counter_info->join('floormap_counter_expected', 'n', 't.counter_name = n.counter_name');

when I try db_query, I do:

$counters_query = "SELECT floormap_counter_expected.counter_name, tls_connect_agent_counters.counter_stage,";
      $counters_query .= "tls_connect_agent_counters.applicant_gwf, tls_connect_agent_counters.counter_ip, ";
      $counters_query .= "floormap_counter_expected.expected FROM tls_connect_agent_counters INNER JOIN ";
      $counters_query .= "floormap_counter_expected ON floormap_counter_expected.counter_name = tls_connect_agent_counters.counter_name";

      $get_counter_info = db_query($counters_query);

Then, I follow with this:

if (isset($get_counter_info)) {
    foreach ($get_counter_info as $results) {
      echo "Rest";
      $center_counters[$results->counter_name]['stage'] = $results->counter_stage;
      $center_counters[$results->counter_name]['counter_ip'] = $results->counter_ip;
  return $center_counters;

With both db_select and db_query, I get an error saying that $center_counters is not set. I've trying using

try{}catch(Exception $e){echo $e-getMessage()}

with both but nothing is printed. Put in an echo with the catch that isn't printed, so I'm assuming the query is running without error because nothing is "caught". I was thinking maybe I'm just calling the information wrong in my foreach loop, maybe I should be identifying the table name as well when I call the field name? I don't think that is the case as nothing is printed when I try to echo strings out of the foreach.


will execute the query...but what are you doing with the results, exactly? At the moment you're discarding them, instead you need to assign them to a variable.

$results = $get_counter_info->execute()->fetchAll();
foreach ($results as $result) {

Or at the very least actually use the return value from the execution:

foreach ($get_counter_info->execute()->fetchAll() as $result) {
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.