לדלג לתוכן

1.7 מסד נתונים עם php הרצאה

הדגמה - MySql

  • כדי להדגים SQL ומסד נתונים פשוט שניתן להפעיל בקלות נבחר במסד נתונים MySql
  • המסד MySql הוא מסד נתונים פשוט וקל מאוד, היתרון שלו שהוא פשוט ואפשר להשתמש בו ממש בקלות עם PHP, ומותקן כבר בXAMPP.

שימו לב להכניס את השם משתמש והסיסמה: (הדיפולטי זה root שם משתמש וסיסמה ריקה.)

יצירת חיבור

<?php
$conn = new mysqli("localhost", "root", "", "my_database");
if ($conn->connect_error) {
    die("שגיאת חיבור: " . $conn->connect_error);
}
echo "החיבור הצליח!";
?>

שליפת נתונים

<?php
$result = $conn->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
    echo "שם: " . $row['name'] . "<br>";
}
?>

הנה דוגמה לקוד מורכב בPHP שמשתמש בmysql

קוד מלא לניהול משתמשים

<?php
// 1. יצירת חיבור למסד הנתונים
$host = "localhost";
$user = "root";
$pass = "";
$db = "user_management";

$conn = new mysqli($host, $user, $pass, $db);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 2. יצירת טבלת משתמשים אם לא קיימת
$createTable = "CREATE TABLE IF NOT EXISTS users (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(30) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";

if ($conn->query($createTable) === FALSE) {
    echo "Error creating table: " . $conn->error;
}

// 3. הוספת משתמש חדש
function addUser($username, $password, $email) {
    global $conn;
    $hashed_password = password_hash($password, PASSWORD_DEFAULT);
    $stmt = $conn->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
    $stmt->bind_param("sss", $username, $hashed_password, $email);
    return $stmt->execute();
}

// 4. עדכון משתמש קיים
function updateUser($id, $newUsername, $newEmail) {
    global $conn;
    $stmt = $conn->prepare("UPDATE users SET username = ?, email = ? WHERE id = ?");
    $stmt->bind_param("ssi", $newUsername, $newEmail, $id);
    return $stmt->execute();
}

// 5. מחיקת משתמש
function deleteUser($id) {
    global $conn;
    $stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
    $stmt->bind_param("i", $id);
    return $stmt->execute();
}

// 6. שליפת כל המשתמשים
function getAllUsers() {
    global $conn;
    $result = $conn->query("SELECT id, username, email, reg_date FROM users");
    return $result->fetch_all(MYSQLI_ASSOC);
}

// 7. אימות משתמש
function verifyUser($username, $password) {
    global $conn;
    $stmt = $conn->prepare("SELECT password FROM users WHERE username = ?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows === 1) {
        $user = $result->fetch_assoc();
        return password_verify($password, $user['password']);
    }
    return false;
}

// 8. דוגמת שימוש
addUser("test_user", "secure123", "test@example.com");

$users = getAllUsers();
foreach ($users as $user) {
    echo "ID: {$user['id']}, Username: {$user['username']}<br>";
}

// 9. סגירת החיבור
$conn->close();
?>

קוד מלא לניהול מוצרים והזמנות

<?php
// 1. יצירת חיבור
$conn = new mysqli("localhost", "root", "", "ecommerce");

// 2. יצירת טבלאות
$conn->query("CREATE TABLE IF NOT EXISTS products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    stock INT DEFAULT 0
)");

$conn->query("CREATE TABLE IF NOT EXISTS orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
)");

// 3. פונקציות לניהול מוצרים
function addProduct($name, $price, $stock) {
    global $conn;
    $stmt = $conn->prepare("INSERT INTO products (name, price, stock) VALUES (?, ?, ?)");
    $stmt->bind_param("sdi", $name, $price, $stock);
    return $stmt->execute();
}

function getProductStock($productId) {
    global $conn;
    $result = $conn->query("SELECT stock FROM products WHERE id = $productId");
    return $result->fetch_assoc()['stock'];
}

// 4. פונקציות להזמנות
function createOrder($userId, $productId, $quantity) {
    global $conn;

    // התחלת עסקה
    $conn->begin_transaction();

    try {
        // בדיקת מלאי
        $currentStock = getProductStock($productId);
        if ($currentStock < $quantity) {
            throw new Exception("Not enough stock");
        }

        // יצירת ההזמנה
        $stmt = $conn->prepare("INSERT INTO orders (user_id, product_id, quantity) VALUES (?, ?, ?)");
        $stmt->bind_param("iii", $userId, $productId, $quantity);
        $stmt->execute();

        // עדכון המלאי
        $conn->query("UPDATE products SET stock = stock - $quantity WHERE id = $productId");

        // אישור העסקה
        $conn->commit();
        return true;
    } catch (Exception $e) {
        $conn->rollback();
        return false;
    }
}

// 5. שאילתה מורכבת עם JOIN
function getUserOrders($userId) {
    global $conn;
    $sql = "SELECT o.id, p.name, p.price, o.quantity, (p.price * o.quantity) as total, o.order_date
            FROM orders o
            JOIN products p ON o.product_id = p.id
            WHERE o.user_id = $userId
            ORDER BY o.order_date DESC";

    $result = $conn->query($sql);
    return $result->fetch_all(MYSQLI_ASSOC);
}

// 6. סגירת החיבור
$conn->close();
?>