Lúc học MySQL ta có thể chạy nhiều câu truy vấn cùng lúc bằng cách viết trong PHPMYADMIN hoặc một editor nào đó như SQLYog. Phần mềm thì mình không bàn tới nhưng với PHPMYADMIN thực chất nó cũng là một ứng dụng web nên nó chạy multi query được thì mình cũng có thể làm được.

Nội dung chính

  • 1. Insert nhiều record vào MySQL bằng PHP
    • Dùng MySQLi Object-oriented:
    • Dùng MySQLi Procedural:
    • Dùng PDO:
  • 2. Lời kết

1. Insert nhiều record vào MySQL bằng PHP

Trong thư viện MySQLi hỗ trợ hai hàm dùng để thực hiện nhiều câu lệnh truy vấn đó là hàm mysqli_multi_query() đối với trường hợp dùng Procedural và phương thức multi_query() đối với trường hợp dùng Object-oriented.

Riêng đối với PDO thì ta phải thực hiện khác chút xíu đó là phải hợp transaction và mỗi lần mỗi câu truy vấn chứ không phải là chạy cùng lúc.

Dùng MySQLi Object-oriented:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Kết nối
$conn = new mysqli('localhost', 'root', 'vertrigo', 'FreetutsDemo');
// Kiểm tra kết nối
if ($conn->connect_error) {
    die("Kết nối thất bại: " . $conn->connect_error);
}
// Câu lệnh SQL
$sql = "INSERT INTO News (title, content)
        VALUES ('tieu de 1', 'noi dung 1');";
$sql .= "INSERT INTO News (title, content)
        VALUES ('tieu de 2', 'noi dung 2');";
// Thực thi câu lệnh
if ($conn->multi_query($sql) === TRUE) {
    echo "Thêm thành công";
} else {
    echo "Lỗi: " . $sql . "<br>" . $conn->error;
}
// Ngắt kết nối
$conn->close();fdas

Bạn lưu ý là vì chúng ta đang thực hiện nhiều câu SQL trong cùng một tài liệu neen cuối mỗi lệnh SQL phải có dấu chấm phẩy nhé ;.

Dùng MySQLi Procedural:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Kết nối
$conn = mysqli_connect('localhost', 'root', 'vertrigo', 'FreetutsDemo');
// Kiểm tra kết nối
if (!$conn) {
    die("Kết nối thất bại: " . mysqli_connect_error());
}
// Câu lệnh SQL
$sql = "INSERT INTO News (title, content)
        VALUES ('tieu de 1', 'noi dung 1');";
$sql .= "INSERT INTO News (title, content)
        VALUES ('tieu de 2', 'noi dung 2');";
// Thực thi câu lệnh
if (mysqli_multi_query($conn, $sql)) {
    echo "Thêm thành công";
} else {
    echo "Lỗi: " . $sql . "<br>" . mysqli_error($conn);
}
// Ngắt kết nối
mysqli_close($conn);

Tương tự như phần lưu ý trên, cuối mỗi câu SQL bạn phải có dấu chấm phẩy.

Dùng PDO:

Khi chúng ta insert nhiều câu truy vấn cùng lúc thì thường bị lỗi có một câu truy vấn nào đó sai cú pháp hoặc bị lỗi thì nó sẽ dừng lại toàn bộ, lúc này những câu SQL đã xử lý sẽ không thể phục hồi được. Ví dụ khi bạn viết chứ năng rút tiền trong thẻ ATM, người dùng đưa thẻ vào và rút tiền, máy ATM sẽ kiêm tra là còn tiền không? Nếu còn thì cập nhật trạng thái là đã rút tiền và trả tiền cho người dùng. Nhưng giả sử mới kiểm tra và câp nhật trạng thái là đã rút tiền nhưng chưa trả tiền thì hệ thống bị lỗi, người dùng chưa nhận được tiền nên sẽ dẫn đến không đồng bộ. Những trường hợp thế này rất là nguy hiểm nên các hệ quản trị CSDL đưa ra khái niệm transaction, với transaction thì chỉ cần một thao tác bị lỗi là lập tức nó sẽ rollback lại toàn bộ trạng thái ban đầu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
try {
    // Kết nối
    $conn = new PDO("mysql:host=localhost;dbname=FreetutsDemo", 'root', 'vertrigo');
    // Thiết lập exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // Bắt đầu transaction
    $conn->beginTransaction();
    
    // Thực thi từng câu truy vấn
    $conn->exec("INSERT INTO News (title, content)
        VALUES ('tieu de 1', 'noi dung 1')");
    $conn->exec("INSERT INTO News (title, content)
        VALUES ('tieu de 2', 'noi dung 2')");
    // Nếu mọi thứ thành công thì commit
    $conn->commit();
    
    echo "Thao tác thành công";
}
catch (PDOException $e) {
    // Nếu xuất hiện lỗi thì rollback lại các thao tác
    $conn->rollback();
    echo "Lỗi: " . $e->getMessage();
}
// Ngắt kết nối
$conn = null;

2. Lời kết

Trong bài này mình có nói sơ lược về transaction nên nếu bạn chưa biết về transaction thì sẽ hơi khó. Hiện tại trên freetuts.net chưa có tutorials về transaction, vì vậy sau này mình sẽ viết về vấn đề này để các bạn nắm rõ hơn. Bài tiếp theo chúng ta sẽ tìm hiểu cơ chế prepared của hai thư viện MySQLi và PDO.

35 BÌNH LUẬN

  1. What i don’t realize is actually how you’re now not really
    a lot more neatly-liked than you might be now. You are very intelligent.
    You recognize thus significantly on the subject of this matter,
    made me for my part imagine it from numerous numerous angles.
    Its like men and women are not interested except it’s one thing to accomplish with
    Woman gaga! Your individual stuffs excellent. At all times
    take care of it up!

  2. Hey there, I think your website might be having browser compatibility issues.

    When I look at your website in Chrome, it looks fine but when opening
    in Internet Explorer, it has some overlapping. I just wanted to give
    you a quick heads up! Other then that, excellent blog!

  3. I love your blog.. very nice colors & theme.
    Did you design this website yourself or did you hire someone to do
    it for you? Plz respond as I’m looking to create
    my own blog and would like to find out where u got this from.
    cheers

  4. Discovered anything a number of from in this article.
    I did on the other hand expertise a couple of technical details using this site, since The
    company does experienced to reload the positioning
    a lot of times facing I could understand it to load properly.

  5. Hi! Do you know if they make any plugins to help with SEO?

    I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good results.
    If you know of any please share. Thanks!

  6. Hey there! This post could not be written any better!
    Reading through this post reminds me of my old room
    mate! He always kept talking about this. I will forward this
    page to him. Pretty sure he will have a good
    read. Many thanks for sharing!

  7. Its like you read my mind! You appear to grasp a lot approximately this, such as you wrote the
    ebook in it or something. I feel that you simply could do with
    a few p.c. to drive the message house a little bit, but instead of that, this is great blog.
    An excellent read. I’ll certainly be back.

  8. Hi there! I just wanted to ask if you ever have any trouble with hackers?
    My last blog (wordpress) was hacked and I ended up losing
    months of hard work due to no data backup. Do you have any methods to protect against
    hackers?

  9. I’m more than happy to discover this great site.

    I wanted to thank you for your time due to this wonderful read!!
    I definitely appreciated every bit of it and i also have you saved
    as a favorite to see new things in your website.

  10. With havin so much written content do you ever run into any problems of plagorism or copyright violation? My blog has a lot
    of exclusive content I’ve either written myself or outsourced but it appears
    a lot of it is popping it up all over the web without my permission.
    Do you know any ways to help reduce content from being
    ripped off? I’d definitely appreciate it.

  11. Great beat ! I wish to apprentice while you amend your site, how could i subscribe for a blog web site?
    The account helped me a acceptable deal. I had been tiny bit acquainted of this your broadcast offered bright clear concept

  12. Hey there would you mind sharing which blog platform you’re working with?

    I’m planning to start my own blog in the near future but I’m having a hard
    time deciding between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your design seems different then most blogs and I’m looking for something unique.
    P.S My apologies for being off-topic but I had to ask!

  13. May I simply just say what a relief to discover someone who truly knows what they are
    talking about on the web. You actually understand how
    to bring a problem to light and make it important. A lot more people need to check
    this out and understand this side of the story.
    I was surprised you aren’t more popular because
    you definitely possess the gift.

  14. I do not know whether it’s just me or if everyone else experiencing issues with your site.

    It seems like some of the written text on your content
    are running off the screen. Can somebody else please provide
    feedback and let me know if this is happening
    to them too? This might be a issue with my web browser
    because I’ve had this happen before. Appreciate it

  15. Howdy just wanted to give you a brief heads up and let you know a few of the pictures aren’t loading correctly.
    I’m not sure why but I think its a linking issue.
    I’ve tried it in two different web browsers and both show the same results.

  16. Thank you a bunch for sharing this with all folks you really
    realize what you are speaking approximately! Bookmarked.
    Kindly also talk over with my site =). We will have a hyperlink trade
    arrangement among us

THOÁT KHỎI BÌNH LUẬN

Please enter your comment!
Please enter your name here