Łączenie z bazą danych MySQL za pomocą PHP
Teraz zaczyna się faktyczne kodowanie po stronie serwera. Utwórz klasę PHP, aby połączyć się z bazą danych MySQL. Głównym celem tej klasy jest otwarcie połączenia z bazą danych i zamknięcie połączenia, gdy nie jest to potrzebne. Utwórz dwa pliki o nazwie db_config.php i db_connect.php
db_config.php – będzie miał zmienne połączenia z bazą danych
db_connect.php – plik klasy do połączenia z bazą danych
Poniżej znajduje się kod dwóch plików php
db_config.php
<?php
/*
* All database connection variables
*/
define('DB_USER', "android"); // db user
define('DB_PASSWORD', ""); // db password (mention your db password here)
define('DB_DATABASE', "androidhive"); // database name
define('DB_SERVER', "localhost"); // db server
?>
db_connect.php
<?php
/**
* A class file to connect to database
*/
function podlacz() {
require_once 'db_config.php';
$con = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD);
mysqli_set_charset($con,"utf8");
mysqli_select_db($con,DB_DATABASE);
return $con;
}
?>
Użycie: Gdy chcesz połączyć się z bazą danych MySQL i wykonać jakiekolwiek operacje, użyj klasy db_connect.php w ten sposób
$db = new DB_CONNECT(); // tworzenie obiektu klasy (otworzy połączenie z bazą danych)
Podstawowe operacje CRUD MySQL przy użyciu PHP (Create, Read, Update, Delete)
W swoim projekcie PHP utwórz nowy plik php o nazwie create_product.php i umieść następujący kod. Ten plik służy głównie do tworzenia nowego produktu w tabeli produktów.
W poniższym kodzie czytam dane produktu przez POST i przechowuję je w tabeli produktów. Na koniec odbieram odpowiednią odpowiedź JSON jako odpowiedź.
create_product.php
<?php $response = array(); // check for required fields if (isset($_POST['name']) && isset($_POST['price']) && isset($_POST['description'])) { $name = $_POST['name']; $price = $_POST['price']; $description = $_POST['description']; // include db connect class require_once 'db_connect.php'; // connecting to db $con = podlacz(); // mysql inserting a new row $result = mysqli_query($con,"INSERT INTO products(name, price, description) VALUES('$name', '$price', '$description')"); // check if row inserted or not if ($result) { // successfully inserted into database $response["success"] = 1; $response["message"] = "Product successfully created."; // echoing JSON response echo json_encode($response); } else { // failed to insert row $response["success"] = 0; $response["message"] = "Oops! An error occurred."; // echoing JSON response echo json_encode($response); } } else { // required field is missing $response["success"] = 0; $response["message"] = "Required field(s) is missing"; // echoing JSON response echo json_encode($response); } ?>
Dla kodu powyżej odpowiedź JSON będzie następująca:
Kiedy nie podano parametrów:
{
„success”: 0,
„message”: „Required field(s) is missing”
}
Kiedy produkt został poprawnie utworzony:
{
„success”: 1,
„message”: „Product successfully created.”
}
Kiedy wystąpił problem z dodawaniem danych:
{
„success”: 0,
„message”: „Oops! An error occurred.”
}
Czytanie wiersza z MySQL (czytanie szczegółów produktu)
Utwórz nowy plik php o nazwie get_product_details.php i napisz następujący kod. Ten plik otrzyma szczegółowe informacje o pojedynczym produkcie, przyjmując identyfikator produktu (pid) jako parametr wpisu.
get_product_details.php
<?php $response = array(); // include db connect class require_once 'db_connect.php'; // connecting to db $con = podlacz(); // check for post data if (isset($_GET["pid"])) { $pid = $_GET['pid']; // get a product from products table $result = mysqli_query($con,"SELECT * FROM products WHERE pid = $pid"); if (!empty($result)) { // check for empty result if (mysqli_num_rows($result) > 0) { $result = mysqli_fetch_array($result); $product = array(); $product["pid"] = $result["pid"]; $product["name"] = $result["name"]; $product["price"] = $result["price"]; $product["description"] = $result["description"]; $product["created_at"] = $result["created_at"]; $product["updated_at"] = $result["updated_at"]; // success $response["success"] = 1; // user node $response["product"] = array(); array_push($response["product"], $product); // echoing JSON response echo json_encode($response); } else { // no product found $response["success"] = 0; $response["message"] = "No product found"; // echo no users JSON echo json_encode($response); } } else { // no product found $response["success"] = 0; $response["message"] = "No product found"; // echo no users JSON echo json_encode($response); } } else { // required field is missing $response["success"] = 0; $response["message"] = "Required field(s) is missing"; // echoing JSON response echo json_encode($response); } ?>
Odpowiedź JSON na podstawie powyższego kodu będzie następująca:
Kiedy poprawnie pobierze informacje o produkcie:
{
„success”: 1,
„product”: [
{
„pid”: „1”,
„name”: „iPHone 4S”,
„price”: „300.00”,
„description”: „iPhone 4S white”,
„created_at”: „2012-04-29 01:41:42”,
„updated_at”: „0000-00-00 00:00:00”
}
]
}
Kiedy nie zostanie znaleziony produkt o podanym pid:
{
„success”: 0,
„message”: „No product found”
}
Wczytanie wszystkich wierszy z bazy (Odczytanie wszystkich produktów)
Potrzebujemy json, aby wyświetlić listę wszystkich produktów na urządzeniu z Androidem. Utwórz nowy plik php o nazwie get_all_products.php i napisz następujący kod.
get_all_products.php
<?php $response = array(); require_once 'db_connect.php'; //header('Content-type: application/json; charset=utf-8'); $con = podlacz(); $result = mysqli_query($con, 'SELECT * FROM products'); // check for empty result if (!$result === false) { $response["products"] = array(); foreach ($result as $row) { // temp user array $product = array(); $product["pid"] = $row["pid"]; $product["name"] = $row["name"]; $product["price"] = $row["price"]; $product["description"] = $row["description"]; $product["created_at"] = $row["created_at"]; $product["updated_at"] = $row["updated_at"]; // push single product into final response array array_push($response["products"], $product); } // success $response["success"] = 1; // echoing JSON response echo json_encode($response); } else { // no products found $response["success"] = 0; $response["message"] = "No products found"; // echo no users JSON echo json_encode($response); } ?>
A odpowiedź będzie w JSON następująca:
{
„products”: [
{
„pid”: „1”,
„name”: „iPhone 4S”,
„price”: „300.00”,
„created_at”: „2012-04-29 02:04:02”,
„updated_at”: „0000-00-00 00:00:00”
},
{
„pid”: „2”,
„name”: „Macbook Pro”,
„price”: „600.00”,
„created_at”: „2012-04-29 02:04:51”,
„updated_at”: „0000-00-00 00:00:00”
},
{
„pid”: „3”,
„name”: „Macbook Air”,
„price”: „800.00”,
„created_at”: „2012-04-29 02:05:57”,
„updated_at”: „0000-00-00 00:00:00”
},
{
„pid”: „4”,
„name”: „OS X Lion”,
„price”: „100.00”,
„created_at”: „2012-04-29 02:07:14”,
„updated_at”: „0000-00-00 00:00:00”
}
],
„success”: 1
}
Kiedy nie znajdzie produktów:
{
„success”: 0,
„message”: „No products found”
}
Aktualizowanie wiersza w MySQL (Aktualizowanie szczegółów produktu)
Utwórz plik php o nazwie update_product.php, aby zaktualizować szczegóły produktu. Każdy produkt jest oznaczony pid.
update_product.php
<?php $response = array(); // check for required fields if (isset($_POST['pid']) && isset($_POST['name']) && isset($_POST['price']) && isset($_POST['description'])) { $pid = $_POST['pid']; $name = $_POST['name']; $price = $_POST['price']; $description = $_POST['description']; // include db connect class require_once 'db_connect.php'; // connecting to db $con = podlacz(); // mysql update row with matched pid $result = mysqli_query($con,"UPDATE products SET name = '$name', price = '$price', description = '$description' WHERE pid = $pid"); // check if row inserted or not if ($result) { // successfully updated $response["success"] = 1; $response["message"] = "Product successfully updated."; // echoing JSON response echo json_encode($response); } else { } } else { // required field is missing $response["success"] = 0; $response["message"] = "Required field(s) is missing"; // echoing JSON response echo json_encode($response); } ?>
W przypadku poprawnego wukonania odpowiedź JSON będzie następująca:
{
„success”: 1,
„message”: „Product successfully updated.”
}
Usuwanie wiersza w MySQL (Usuwanie produktu)
Ostatnią operacją jest usunięcie bazy danych. Utwórz nowy plik php o nazwie delete_product.php i wklej następujący kod. Główną funkcją tego pliku jest usunięcie produktu z bazy danych.
delete_product.php
<?php $response = array(); // check for required fields if (isset($_POST['pid'])) { $pid = $_POST['pid']; // include db connect class require_once 'db_connect.php'; // connecting to db $con = podlacz(); // mysql update row with matched pid $result = mysqli_query($con,"DELETE FROM products WHERE pid = $pid"); // check if row deleted or not if (mysqli_affected_rows($con) > 0) { // successfully updated $response["success"] = 1; $response["message"] = "Product successfully deleted"; // echoing JSON response echo json_encode($response); } else { // no product found $response["success"] = 0; $response["message"] = "No product found"; // echo no users JSON echo json_encode($response); } } else { // required field is missing $response["success"] = 0; $response["message"] = "Required field(s) is missing"; // echoing JSON response echo json_encode($response); } ?>
W przypadku powodzenia:
{
„success”: 1,
„message”: „Product successfully deleted”
}
w innym przypadku:
{
„success”: 0,
„message”: „No product found”
}