Skip to content

Latest commit

 

History

History
164 lines (124 loc) · 3.35 KB

File metadata and controls

164 lines (124 loc) · 3.35 KB

Quick Start Guide

Get started with EasyQuery in 5 minutes!

Installation

composer require knifelemon/easy-query

Basic Usage

1. Set up your database connection

use KnifeLemon\EasyQuery\Builder;

// Create PDO connection
$pdo = new PDO('mysql:host=localhost;dbname=myapp', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

2. Build your first query

// Build a SELECT query
$q = Builder::table('users')
    ->select(['id', 'name', 'email'])
    ->where(['status' => 'active'])
// Execute
$stmt = $pdo->prepare($q['sql']);
$stmt->execute($q['params']);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

Common Patterns

INSERT

$q = Builder::table('users')
    ->insert([
        'name' => 'John Doe',
        'email' => 'john@example.com',
        'created_at' => Builder::raw('NOW()')
    ])
    ->build();

$stmt = $pdo->prepare($q['sql']);
$stmt->execute($q['params']);
$userId = $pdo->lastInsertId();

UPDATE

$q = Builder::table('users')
    ->update(['status' => 'inactive'])
    ->where(['id' => 123])
    ->build();

$stmt = $pdo->prepare($q['sql']);
$stmt->execute($q['params']);
$affectedRows = $stmt->rowCount();

DELETE

$q = Builder::table('users')
    ->delete()
    ->where(['id' => 123])
    ->build();

$stmt = $pdo->prepare($q['sql']);
$stmt->execute($q['params']);

JOIN

$q = Builder::table('posts')
    ->alias('p')
    ->select(['p.title', 'u.name AS author'])
    ->innerJoin('users', 'p.user_id = u.id', 'u')
    ->where(['p.status' => 'published'])
    ->build();

$stmt = $pdo->prepare($q['sql']);
$stmt->execute($q['params']);
$posts = $stmt->fetchAll(PDO::FETCH_ASSOC);

COUNT

$q = Builder::table('users')
    ->count()
    ->where(['status' => 'active'])
    ->build();

$stmt = $pdo->prepare($q['sql']);
$stmt->execute($q['params']);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$count = $result['cnt'];

NOT IN

$q = Builder::table('users')
    ->where(['status' => ['NOT IN', ['banned', 'deleted']]])
    ->build();

$stmt = $pdo->prepare($q['sql']);
$stmt->execute($q['params']);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

Safe Column Names from User Input

// When sorting by user-selected column
$sortColumn = Builder::safeIdentifier($_GET['sort']);  // Validates input
$q = Builder::table('users')
    ->orderBy($sortColumn . ' DESC')
    ->build();

// For aggregation with user-selected column
$q = Builder::table('orders')
    ->select([Builder::rawSafe('SUM({col})', ['col' => $_GET['column']])->value])
    ->build();

FlightPHP Integration

use KnifeLemon\EasyQuery\Builder;

Flight::route('GET /users', function() {
    $q = Builder::table('users')
        ->where(['status' => 'active'])
        ->orderBy('created_at DESC')
        ->limit(20)
        ->build();
    
    $users = Flight::db()->fetchAll($q['sql'], $q['params']);
    Flight::json(['users' => $users]);
});

Next Steps

  • Read the full README.md for comprehensive documentation
  • Check out the examples directory for more patterns
  • Review SECURITY.md for security best practices

Need Help?

Happy querying! 🚀