2009-05-23 5 views
4

Je voulais savoir s'il y a moyen d'enregistrer les requêtes mysql dans CakePHP en cours d'exécution lorsque nous utilisons la méthode de recherche sur les modèles, je sais que des rails requêtes de base de données, ne gâteau faire la même chose, si alors comment puis-je l'activer ou l'utiliser?MySQL Query Connexion à CakePHP

Shiv

Répondre

1

En supposant que vous êtes sur un os nix, la meilleure approche serait en fait la queue pour le mysql journal lui-même.
Vous pourriez apprendre des choses intéressantes.

journal dans Ubuntu lors de l'installation du référentiel

tail -f /var/log/mysql/mysql.log 

Comme mentionné ci-dessous, c'est un énorme tueur de performance (bien, tous les journaux ont un certain impact sur les performances). Donc, assurez-vous de ne l'utiliser que sur vos machines de développement/QA et seulement pour de courtes périodes sur votre machine de production.

+0

aucun moyen de lui ouvrir une session de CakePHP, comme nous utilisez $ this-> log – Shiv

+1

par défaut, mysql.log est désactivé car c'est un énorme tueur de performance, vous devrez le désactiver depuis my.cnf et ne le faire que dans un environnement de développement! – duckyflip

6

This page a des instructions sur la façon d'obtenir gâteau pour enregistrer les requêtes de la même manière que des rails.

1

CakePHP 1.3 utilise l'élément sql_dump pour cela.
Vous pouvez utiliser l'élément directement lorsque Configure::read('debug') est réglé sur 2:

echo $this->element('sql_dump'); 

Ou prendre son code directement si vous avez besoin de faire quelque chose d'autre avec elle (comme l'écho d'un ShellTask)

$sources = ConnectionManager::sourceList(); 

$logs = array(); 
foreach ($sources as $source): 
    $db =& ConnectionManager::getDataSource($source); 
    if (!$db->isInterfaceSupported('getLog')): 
     continue; 
    endif; 
    $logs[$source] = $db->getLog(); 
endforeach; 

Echo avec par exemple:

print_r($logs) 
1

C'est ce que je l'utilise (le mettre dans le dossier de l'élément dans votre INCLUDE, alors la mise en page)

<?php 
    ob_start(); 
    echo $this->element('sql_dump'); 
    $out = ob_get_contents(); 
    ob_end_clean(); 
    CakeLog::write('mysql' , $out); 
?> 

vous trouverez le fichier mysql.log dans TMP.logs.DS.mysql.log

4

Une méthode très simple pour enregistrer toutes les requêtes en cours d'exécution:

dans votre gâteau \ libs \ modèle \ datasources \ dbo \ dbo_mysql.php

trouver la fonction _execute:

function _execute($sql) { 
     return mysql_query($sql, $this->connection); 
} 

ajouter la ligne "$ this-> log ($ sql); "avant" return mysql_query ($ sql, $ this-> connexion); "

function _execute($sql) { 
    $this->log($sql); 
    return mysql_query($sql, $this->connection); 
} 

Ca y est !!!!! Toutes vos requêtes SQL obtient connecté. Assurez-vous que le fichier journal est configuré correctement et avoir la permission suffisante. Profitez

+2

Il est de mauvaise pratique de modifier directement code CakePHP de base.Cette méthode doit être évitée.Si vous voulez modifier le comportement de Cake étendre dans le répertoire de votre application. – drmonkeyninja