Es posible volver a la real de la consulta SQL como una cadena a partir del resultado de db_query?

O de lo contrario tomar la devuelve el IDENTIFICADOR de recurso de db_query y obtener la cadena SQL?


Edición:

Como un apéndice, recientemente me enteré de db_queryd() desde el módulo Devel, que se hace eco de la consulta del pasado (así como ejecutar). No devuelve la cadena como esta pregunta, pero realmente útil para copiar y pegar una consulta completa.

  • Comprobar mi pregunta y de la respuesta aquí: stackoverflow.com/questions/13714873/…. He hecho algunas convertidor de Drupal SelectQuery objetos. Tal vez no sea la solución perfecta, pero funciona bien en todas partes lo estoy usando.
InformationsquelleAutor ack | 2010-06-29

7 Comentarios

  1. 3

    Creo que no lo es. Sin embargo, si sólo se hacen con el propósito de depuración se puede activar el módulo devel y que le mostrará la ejecución de consultas.

    Realidad sólo pudo establecer la variable ‘dev_query’ a 1 y, a continuación, acceder a la matriz global $consultas, pero yo no lo recomiendo.

    • se olvidó de que cuentan con, gracias!
  2. 2

    Drupal 7, si de depuración, se puede encontrar en \includes\bases de datos\base de datos.inc:

    function query($query, array $args = array(), $options = array())

    $stmt queryString del

    o

    print_r($stmt->getQueryString());
  3. 2

    Si usted tiene D7 pero no tiene Devel a mano, el siguiente fragmento de código podría ser útil — no pueden manejar cada tipo de marcador de posición sin embargo… en la actualidad supone equivocadamente todos los marcadores de posición son cadenas (que ha sido muy bien para mi uso).

    function stringify_query( $query ){
      $s = preg_replace('/\}|\{/', '', $query->__toString());
      $a = $query->arguments();
      foreach ( $a as $key => $val ) {
        $a[$key] = '\'' . $val . '\'';
      }
      return strtr($s, $a);
    }

    También groseramente tiras de Drupal de llaves usadas para manejar los prefijos de tabla, si usted confía en la tabla de los prefijos a continuación, usted debe encontrar el correcto Drupal función a ellos han reemplazado correctamente.

  4. 1

    Yo recomendaría el uso de la devel módulo. Hay una configuración devel ofertas que se muestran todas las consultas que se ejecutan durante la generación de una página en la parte inferior de la página, con los datos de tiempo de ejecución de consulta y la función que llamó a db_query(). Si usted tiene una idea general de lo que la consulta tendrá el aspecto o la función que llama, usted puede buscar dentro de su navegador y usted puede ver lo que en realidad era enviar a la base de datos.

  5. 1

    Tardanza en responderte, pero a menudo se puede convertir

    $result = db_query($query, $arg1, $arg2);

    rápidamente en

    drupal_set_message(sprintf($query, $arg1, $arg2), "status");

    Y conseguir lo que quieres.

    Esto no le ayudará si usted está utilizando una matriz como argumento para db_query como sprintf no apoyo eso, pero es a menudo útil en su kit de herramientas de depuración.

  6. 0

    Para aquellos que utilizan Drupal 7.x y el Devel módulo, la correcta función de llamada a la salida de la construida instrucción SQL a la drupal área de mensaje es dpq(). Debe pasarse el objeto de consulta, aunque. por ejemplo,

    //to see the built SQL
    $query = db_select('node', 'n')->fields('n');    
    dpq($query);
    
    //to see the results of the query
    $results = $query->execute()->fetchAssoc();
    dsm($results);

    La esperanza de que puede ayudar!

    • La pregunta original era para db_query. El problema con db_query es que usted no puede conseguir fácilmente entre el edificio de la consulta y la ejecución del mismo.
  7. 0

    D7 versión con devel.

    >= PHP 5.4

    dpm(str_replace(['{', '}'], '', dpq($query, TRUE)));

    < PHP 5.4

    dpm(str_replace(array('{', '}'), '', dpq($query, TRUE)));

Dejar respuesta

Please enter your comment!
Please enter your name here