zend tutorial framework curso php mysql zend-framework zend-db

php - tutorial - ¿Cómo imprimir una consulta SQL exacta en Zend Framework?



zend framework tutorial (12)

Ahora en Zend2:

$select->getSqlString();

Mostrar el SQL generado desde el objeto ZendDbSql

Tengo la siguiente pieza de código que tomé del modelo,

... $select = $this->_db->select() ->from($this->_name) ->where(''shipping=?'',$type) ->where(''customer_id=?'',$userid); echo $select; exit; // which gives exact mysql query. .....

Cuando uso la consulta de actualización en zend like,

$up_value = array(''billing''=> ''0''); $this->update($up_value,''customer_id =''.$userid.'' and address_id <> ''.$data[''address_Id'']);

Aquí quiero saber la consulta exacta de mysql. ¿Hay alguna manera posible de imprimir la consulta mysql en zend? consejos amablemente


He atravesado cientos de páginas, busqué en Google pero no encontré ninguna solución exacta. Finalmente esto funcionó para mí. Independientemente de dónde se encuentre en el controlador o modelo. Este código funcionó para mí en todos lados. Solo usa esto

//Before executing your query $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $db->getProfiler()->setEnabled(true); $profiler = $db->getProfiler(); // Execute your any of database query here like select, update, insert //The code below must be after query execution $query = $profiler->getLastQueryProfile(); $params = $query->getQueryParams(); $querystr = $query->getQuery(); foreach ($params as $par) { $querystr = preg_replace(''///?/'', "''" . $par . "''", $querystr, 1); } echo $querystr;

Finalmente, esto funcionó para mí.


He hecho esto de esta manera

$sql = new Sql($this->adapter); $select = $sql->select(); $select->from(''mock_paper''); $select->columns(array( ''is_section'' )); $select->where(array(''exam_id = ?'' => $exam_id,''level_id = ?'' => $level_id))->limit(1); $sqlstring = $sql->buildSqlString($select); echo $sqlstring; die();


Los objetos seleccionados tienen un método __toString () en Zend Framework.

Del manual de Zend Framework:

$select = $db->select() ->from(''products''); $sql = $select->__toString(); echo "$sql/n"; // The output is the string: // SELECT * FROM "products"

Una solución alternativa sería usar Zend_Db_Profiler. es decir

$db->getProfiler()->setEnabled(true); // your code $this->update($up_value,''customer_id =''.$userid.'' and address_id <> ''.$data[''address_Id'']); Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery()); Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams()); $db->getProfiler()->setEnabled(false);

http://framework.zend.com/manual/en/zend.db.select.html


Mira el Zend_Db_Profiler . Esto le permite registrar cualquier instrucción SQL a medida que se prepara y ejecuta. Funciona para las instrucciones UPDATE y SELECT.


Puede usar Zend_Debug::Dump($select->assemble()); para obtener la consulta SQL.

O puede habilitar el generador de perfiles Zend DB FirePHP que obtendrá todas las consultas en un formato ordenado en Firebug (incluso en las instrucciones UPDATE).

EDITAR : la creación de perfiles con FirePHP también funciona también en FF6.0 + (no solo en FF3.0 como se sugiere en el enlace)


Utilizar esta:-

echo $select->query();

o

Zend_Debug::dump($select->query();


aún más corto:

echo $select->__toString()."/n";

y más corto:

echo $select .""; die;


desde> = 2.1.4

echo $select->getSqlString()


puedes imprimir ...

print_r($select->assemble());


$db->getProfiler()->setEnabled(true); // your code $this->update(''table'', $data, $where); Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery()); Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams()); $db->getProfiler()->setEnabled(false);


$statement = $this->sql->getSqlStringForSqlObject( HERE GOES Zend/Db/Sql/SelectSQL object ); echo "SQL statement: $statement";

Ejemplo:

$select = $this->sql->select(); ... $select->from(array( ''u'' => ''users'' )); $select->join(... $select->group(''u.id''); ... $statement = $this->sql->getSqlStringForSqlObject($select); echo $statement;