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();
?>