J'ai essayé de faire ce travail pour les dernières heures. J'ai un proc stockée simple appelé get_log_entries:PEAR MDB2 executeStoredProc et retourne un jeu de résultats. Possible? Ça vaut le coup?
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_log_entries`(p_min_id INT)
BEGIN
SET p_min_id = IFNULL(p_min_id, -1);
SELECT * FROM db_log WHERE item_id > p_min_id;
END
Il est mort simple et il renvoie des résultats en deux colonnes: item_id (int) et log_description (varchar). J'essaye d'exécuter ceci en utilisant l'objet MDB2, mais jusqu'ici aucune chance. Voici le code qui tente de le faire:
$conn = MDB2::factory('mysql://myUser:[email protected]/my_db');
if (PEAR::isError($conn)) {
die ("Cannot connet to DB(10): " . $conn->getMessage());
}
// loading the Function module
$conn->loadModule('Function');
$params = array('null');
$result = $conn->executeStoredProc('get_log_entries', $params);
if (PEAR::isError($result)) {
$msg = $result->getMessage() . "<br /><br />" . $result->getUserInfo();
die ($msg);
}
A ce stade, cette belle erreur apparaît avec le message:
« _doQuery: [Message d'erreur: Impossible exécuter l'instruction] [Dernière exécutés requête: CALL get_log_entries()] [native Code : 1312] [message natif: PROCÉDURE wh_search.get_log_entries ne peuvent pas revenir un jeu de résultats dans le contexte donné] »
Maintenant, j'ai quelques questions:
1. Est-il même possible d'exécuter des SP en utilisant MDB2 et de renvoyer des ensembles de résultats?
2. Est-il préférable d'écrire moi-même une classe wrapper pour les fonctions PHP-MySQL "natives"?
Merci!