Hướng dẫn dùng pdo file trong PHP
Hướng dẫn xóa dữ liệu trong PHP bằng PDO chi tiết thông qua các ví dụ cụ thể: Positional Placeholders, Named Placeholders, sử dụng phương thức bindParam() Show Như ví dụ trước Update dữ liệu trong PHP bằng PDO chúng ta sẽ dùng cơ sở dữ liệu đó để xóa những bài viết trong cơ sở dữ liệu. Cú pháp xóa dữ liệu MySQLDELETE FROM table_name WHERE condition;
DELETE FROM posts WHERE id=1; Vậy là qua cú pháp chúng ta sẽ có các cách xóa dữ liệu thông qua PDO như sau: Xóa dữ liệu với Phần giữ chỗ Vị trí
Xóa dữ liệu với phần giữ chỗ được đặt tên
Xóa dữ liệu với phần giữ chỗ được đặt tên bằng phương thức bindParam()
Vậy là qua bài viết này và các hướng dẫn: Thêm dữ liệu trong PHP bằng PDO, Update dữ liệu trong PHP bằng PDO các bạn đã có được những kiến thức cần thiết để thực hiện với cơ sở dữ liệu trong các dự án PHP thông qua PDO. Trong bài này, chúng ta sẽ tìm hiểu về cách kết nối MySQL với PHP sử dụng PDO. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP. 1. Hệ quản trị cơ sở dữ liệu MySQLMySQL là một hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở (open-source relational database management system). MySQL được phát triển bởi tập đoàn Oracle và được viết bằng ngôn ngữ C và C++. Chúng ta có thể download và sử dụng MySQL một cách miễn phí tại website https://www.mysql.com/. Chúng ta có thể sử dụng MySQL được tích hợp trong XAMPP. Các bạn có thể đọc bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách cài đặt XAMPP và khởi chạy MySQL. Có 3 cách để kết nối cơ sở dữ liệu MySQL với PHP: – MySQLi (object-oriented) – MySQLi (procedural) – PDO (PHP Data Object) Trong bài này, chúng ta sẽ sử dụng PDO (PHP Data Object) để tạo kết nối PHP với MySQL được tích hợp trong XAMPP. 2. PDO (PHP Data Object) là gì?PDO (PHP Data Object) là một lớp trong PHP giúp kết nối nhiều hệ quản trị cơ sở dữ liệu (CSDL) khác nhau. Ngoài MySQL, chúng ta có thể kết nối PHP với Oracle, Microsoft SQL Server, PostgreSQL,… bằng cách sử dụng PDO. Với mỗi CSDL khác nhau, PDO sẽ sử dụng các loại driver khác nhau. Các câu lệnh SQL được truyền vào PDO sẽ được xử lý phù hợp với từng CSDL. Do đó, chúng ta có thể dễ dàng chuyển sang một hệ quản trị CSDL khác khi sử dụng PDO. Việc đơn giản là chỉ cần thay đổi Connection String (chuỗi kết nối CSDL). 3. Kết nối cơ sở dữ liệu MySQL với PHP sử dụng PDOĐể kết nối với MySQL sử dụng PDO, chúng ta cần tạo một đối tượng PDO và truyền vào một chuỗi kết nối CDSL. PDO (PHP Data Object) là các API có sẵn của PHP cho phép người lập trình có thể kết nối để làm việc với cơ sở dữ liệu. PDO không phải là một khái niệm mới, nó được giới thiệu lần đầu tiên ở phiên bản PHP 5, hiện nay đang được sử dụng rất phổ biến. PDO là các đối tượng dữ liệu trong PHP, nó sẽ chuyển tất cả dữ liệu thành đối tượng, đồng thời cũng cung cấp các phương thức để thao tác với cơ sở dữ liệu. I. Lưu ý: Khi Sử dụng các đoạn code có khả năng lỗi cần viết vào try, catch try II. Fetch dữ liệu Có hai cách căn bản để lấy dữ liệu trong PDO là query và excute. $result = $db->query( 'select SQL_CALC_FOUND_ROWS * from nv3_config LIMIT 0, 30' ); printf( 'module: %s ', $row['module'], $row['config_name'] ); } - Exec: sử dụng trong các trường hợp câu truy vấn không có biến truyền vào, hoặc các biến chắc chắn không gây ra Sql Injection, giá trị trả về là số dòng thực hiện. $count = $db->exec( "DELETE FROM nv3_config WHERE module = 'khongco'" ); Ngoài ra, còn có một cách tiếp cận khác nữa là sử dụng bindParam, phương thức này sử dụng trong trường hợp nếu có biến truyền vào câu truy vấn. $config_name = 'users2'; $module = 'users'; III. Chỉ định dữ liệu đầu ra Cũng như cách dùng của API mysql, dữ liệu khi được lấy ra từ cơ sở dữ liệu cần phải được “đổ” (fetch) vào một array, object hoặc một class thì mới sử dụng được. PDO cũng cung cấp một số kiểu fetch cơ bản như sau: - PDO::FETCH_ASSOC: Trả về dạng mảng (array) - PDO::FETCH_BOTH: Trả về một mảng, key giữa tên cột và giá trị index bắt đầu từ 0 Mặc định, NukeViet sử dụng PDO::FETCH_ASSOC. $sql = 'SELECT * FROM ' . NV_PREFIXLANG . '_' . $module_data . ' WHERE status=1 AND id=' . $id; $row = $db->query( $sql )->fetch(); Mặc định, NukeViet sử dụng PDO::FETCH_ASSOC. IV. Thao tác dữ liệu 1. Create (insert) $sth = $db->prepare('INSERT INTO ' . NV_PREFIXLANG . '_' . $module_data . ' VALUES(NULL, :name, :birthday, :class)'); $sth->bindParam(':name', $name, PDO::PARAM_STR); 2. Update $sth = $db->prepare('UPDATE ' . NV_PREFIXLANG . '_' . $module_data . ' SET name = :name, birthday = :birthday, class = :class)'); 3. Delete $sth = $db>prepare('DELETE FROM ' . NV_PREFIXLANG . '_' . $module_data . ' WHERE id = :id'); Thực thi nhiều câu lệnh $stmt = $db->prepare('INSERT INTO ' . NV_PREFIXLANG . '_' . $module_data . ' VALUES(:name)'); # Second insertion // Max Weight // Fetch Limit $all_page = $db->query( $db->sql() )->fetchColumn(); $db->select( '*' ) V. Các chú ý trong lập trình CSDL với NukeViet 2. Về các câu truy vấn các cột SELECT `catid`, `parentid`, `title` FROM `nv3_vi_news_cat` Thì cần viết lại: SELECT catid, parentid, title FROM nv3_vi_news_cat Tức bỏ dấu ` đi để có thể chạy được trên các loại CSDL khác, Khi đó sẽ không dùng được các tên sau trong bảng và cột của CSDL: add, all, alter, analyze, and, as, asc, before, between, bigint, binary, both, by, call, cascade, case, change, char, character, check, collate, column, comment, condition, constraint, continue, convert, create, cross, current_user, cursor, database, databases, date, day_hour, day_minute, day_second, dec, decimal, declare, default, delayed, delete, desc, describe, distinct, distinctrow, drop, dual, else, elseif, enclosed, escaped, exists, exit, explain, false, fetch, file, float4, float8, for, force, foreign, from, fulltext, get, grant, group, having, high_priority, hour_minute, hour_second, identified, if, ignore, ignore_server_ids, in, index, infile, inner, insert, int1, int2, int3, int4, int8, integer, interval, into, is, iterate, join, key, keys, kill, leading, leave, left, level, like, limit, lines, load, lock, long, loop, low_priority, master_bind, master_heartbeat_period, master_ssl_verify_server_cert, match, middleint, minute_second, mod, mode, modify, natural, no_write_to_binlog, not, null, number, numeric, on, optimize, option, optionally, or, order, outer, outfile, partition, precision, primary, privileges, procedure, public, purge, read, real, references, release, rename, repeat, replace, require, resignal, restrict, return, revoke, right, rlike, rows, schema, schemas, select, separator, session, set, share, show, signal, spatial, sql_after_gtids, sql_before_gtids, sql_big_result, sql_calc_found_rows, sql_small_result, sqlstate, ssl, start, starting, straight_join, table, terminated, then, to, trailing, trigger, true, undo, union, unique, unlock, unsigned, update, usage, use, user, using, values, varcharacter, varying, view, when, where, while, with, write, year_month, zerofill 3. Đặt bí danh cho bảng (Table Allias) Thay vì viết SELECT t1.catid, t1.parentid, t1.title FROM nv3_vi_news_cat AS t1 Hãy viết bằng SELECT t1.catid, t1.parentid, t1.title FROM nv3_vi_news_cat t1 4. Viết câu lệnh và lấy về chỉ số tăng tự động $sql = "INSERT INTO " . NV_PREFIXLANG . "_" . $module_data . "_cat Và dùng $sth = $db->prepare($sql); Thì cần viết lại theo cách $sql = "INSERT INTO " . NV_PREFIXLANG . "_" . $module_data . "_cat 5. Khi câu lệnh có Limit cần sử dụng lớp $db để tạo câu lệnh SQL $db->sqlreset() $all_page = $db->query( $db->sql() )->fetchColumn(); $db->select( 'id, catid, listcatid, topicid, admin_id, author, sourceid, addtime, edittime, publtime, title, alias, hometext, homeimgfile, homeimgalt, homeimgthumb, allowed_rating, hitstotal, hitscm, total_rating, click_rating' ) $result = $db->query( $db->sql() ); Ngoài ra nếu câu lệnh SQL có sử dụng SQL_CALC_FOUND_ROWS, SELECT FOUND_ROWS() để lấy tổng số kết quả truy vấn (các cách này chỉ chạy trên MySQL). Thì khi đó cần viết thành 2 câu lệnh truy vấn tương tự như trên. 6. Không sử dụng REPLACE INTO trong câu lệnh SQL, thay vì đó hãy sử dụng INSERT hay update 7. PDOStatement :: rowCount () trả về số hàng bị ảnh hưởng bởi cuối cùng DELETE, INSERT, hoặc UPDATE thực hiện bởi các đối tượng PDOStatement tương ứng. |