From 13d291f4442d268ba170b6635e44cd11d3f1049b Mon Sep 17 00:00:00 2001 From: tag Date: Wed, 21 Nov 2012 18:59:34 -0500 Subject: Add raw_execute() to ORM --- idiorm.php | 18 ++++++++++++++++++ test/test_queries.php | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/idiorm.php b/idiorm.php index bc8f1c6..d955c72 100644 --- a/idiorm.php +++ b/idiorm.php @@ -255,6 +255,24 @@ return self::$_db; } + /** + * Executes a raw query as a wrapper for PDOStatement::execute. + * Useful for queries that can't be accomplished through Idiorm, + * particularly those using engine-specific features. + * @example raw_execute('SELECT `name`, AVG(`order`) FROM `customer` GROUP BY `name` HAVING AVG(`order`) > 10') + * @example raw_execute('INSERT OR REPLACE INTO `widget` (`id`, `name`) SELECT `id`, `name` FROM `other_table`') + * @param string $query The raw SQL query + * @param array $parameters Optional bound parameters + * @return bool Success + */ + public static function raw_execute($query, $parameters = array()) { + self::_setup_db(); + + self::_log_query($query, $parameters); + $statement = self::$_db->prepare($query); + return $statement->execute($parameters); + } + /** * Add a query to the internal query log. Only works if the * 'logging' config option is set to true. diff --git a/test/test_queries.php b/test/test_queries.php index 984b407..8cc26d6 100755 --- a/test/test_queries.php +++ b/test/test_queries.php @@ -295,6 +295,10 @@ $expected = "DELETE FROM `widget` WHERE `age` = '10'"; Tester::check_equal("Delete many", $expected); + ORM::raw_execute("INSERT OR IGNORE INTO `widget` (`id`, `name`) VALUES (?, ?)", array(1, 'Tolstoy')); + $expected = "INSERT OR IGNORE INTO `widget` (`id`, `name`) VALUES ('1', 'Tolstoy')"; + Tester::check_equal("Raw execute", $expected); // A bit of a silly test, as query is passed through + // Regression tests $widget = ORM::for_table('widget')->select('widget.*')->find_one(); -- cgit v1.2.3