ulue / miner
A dead simple PHP class for building SQL statements. No manual string concatenation necessary.
Requires
- php: >7.0.0
README
forked from https://github.com/jstayton/Miner
A dead simple PHP class for building SQL statements. No manual string concatenation necessary.
Developed by Justin Stayton while at Monk Development.
Requirements
- PHP > 7.0.0
Installation
Composer
The recommended installation method is through Composer, a dependency manager for PHP.
In command line:
composer require ulue/miner
Or, just add ulue/miner
to your project's composer.json
file:
{ "require": { "ulue/miner": "*" } }
More details can be found over at Packagist.
Getting Started
Composing SQL with Miner is very similar to writing it by hand, as much of the syntax maps directly to methods:
$miner = Miner::create() ->select('*') ->from('shows') ->innerJoin('episodes', 'show_id') ->where('shows.network_id', 12) ->orderBy('episodes.aired_on', Miner::ORDER_BY_DESC) ->limit(20);
Now that the statement is built,
$miner->getSql(); // Or $miner->getStatement();
returns the full SQL string with placeholders (?), and
$miner->getBoundedParams(); // Or $miner->getPlaceholderValues();
returns the array of placeholder values that can then be passed to your database connection or abstraction layer of choice. Or, if you'd prefer it all at once, you can get the SQL string with values already safely quoted:
$miner->getSql(false); // Or $miner->getStatement(false);
If you're using PDO, however, Miner makes executing the statement even easier:
$PDOStatement = $miner->execute();
Miner works directly with your PDO connection, which can be passed during creation of the Miner object
$miner = Miner::create($PDO) $miner = new Miner($PDO);
or after
$miner->setPdoConnection($PDO);
Usage
SELECT
SELECT * FROM shows INNER JOIN episodes ON shows.show_id = episodes.show_id WHERE shows.network_id = 12 ORDER BY episodes.aired_on DESC LIMIT 20
With Miner:
$miner->select('*') ->from('shows') ->innerJoin('episodes', 'show_id') ->where('shows.network_id', 12) ->orderBy('episodes.aired_on', Miner::ORDER_BY_DESC) ->limit(20);
INSERT
INSERT HIGH_PRIORITY shows SET network_id = 13, name = 'Freaks & Geeks', air_day = 'Tuesday'
With Miner:
$miner->insert('shows') ->option('HIGH_PRIORITY') ->set('network_id', 13) ->set('name', 'Freaks & Geeks') ->set('air_day', 'Tuesday');
REPLACE
REPLACE shows SET network_id = 13, name = 'Freaks & Geeks', air_day = 'Monday'
With Miner:
$miner->replace('shows') ->set('network_id', 13) ->set('name', 'Freaks & Geeks') ->set('air_day', 'Monday');
UPDATE
UPDATE episodes SET aired_on = '2012-06-25' WHERE show_id = 12 OR (name = 'Girlfriends and Boyfriends' AND air_day != 'Monday')
With Miner:
$miner->update('episodes') ->set('aired_on', '2012-06-25') ->where('show_id', 12) ->openWhere(Miner::LOGICAL_OR) ->where('name', 'Girlfriends and Boyfriends') ->where('air_day', 'Monday', Miner::NOT_EQUALS) ->closeWhere();
DELETE
DELETE FROM shows WHERE show_id IN (12, 15, 20) LIMIT 3
With Miner:
$miner->delete() ->from('shows') ->whereIn('show_id', array(12, 15, 20)) ->limit(3);
Methods
SELECT
INSERT
REPLACE
UPDATE
DELETE
OPTIONS
SET / VALUES
FROM
- from
- innerJoin
- leftJoin
- rightJoin
- join
- getFrom
- getFromAlias
- getFromString
- getJoinString
- mergeFromInto
- mergeJoinInto
WHERE
- where
- andWhere
- orWhere
- whereIn
- whereNotIn
- whereBetween
- whereNotBetween
- openWhere
- closeWhere
- getWherePlaceholderValues
- getWhereString
- mergeWhereInto
GROUP BY
HAVING
- having
- andHaving
- orHaving
- havingIn
- havingNotIn
- havingBetween
- havingNotBetween
- openHaving
- closeHaving
- getHavingPlaceholderValues
- getHavingString
- mergeHavingInto
ORDER BY
LIMIT
Statement
- execute
- getSql
- getStatement
- getBoundedParams
- getPlaceholderValues
- isSelect
- isInsert
- isReplace
- isUpdate
- isDelete
- __toString
- mergeInto
Connection
Feedback
Please open an issue to request a feature or submit a bug report. Or even if you just want to provide some feedback, I'd love to hear. I'm also available on Twitter as @jstayton.
Contributing
- Fork it.
- Create your feature branch (
git checkout -b my-new-feature
). - Commit your changes (
git commit -am 'Added some feature'
). - Push to the branch (
git push origin my-new-feature
). - Create a new Pull Request.