Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để chuyển đổi tập lệnh sử dụng các hàm mysql_ sang sử dụng các hàm mysqli_?

Lưu ý: Chuyển đổi từ mysql_ tới mysqli_ có thể không tối ưu. Xem xét PDO nếu bạn chuẩn bị chuyển đổi tất cả mã của mình thành OOP .

Có thể rất hấp dẫn khi cố gắng thay thế tất cả các phiên bản của mysql_ với mysqli_ và cầu nguyện nó hoạt động. Bạn sẽ gần gũi nhưng không hoàn toàn đúng.

Kết nối với cơ sở dữ liệu:

May mắn thay, mysqli_connect hoạt động đủ chặt chẽ để mysql_query mà bạn có thể hoán đổi tên chức năng của chúng.

mysql_:

$con = mysql_connect($host, $username, $password);

mysqli_:

$con = mysqli_connect($host, $username, $password);

Chọn cơ sở dữ liệu

Bây giờ, với hầu hết các chức năng khác trong mysqli_ thư viện, bạn sẽ cần chuyển mysqli_select_db kết nối cơ sở dữ liệu là đầu tiên của nó tham số. Hầu hết mysqli_ các chức năng yêu cầu đối tượng kết nối trước.

Đối với hàm này, bạn chỉ có thể chuyển thứ tự của các đối số mà bạn truyền cho hàm. Nếu trước đây bạn không chuyển nó một đối tượng kết nối, thì bạn phải thêm nó làm tham số đầu tiên ngay bây giờ.

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

Như một phần thưởng, bạn cũng có thể chuyển tên cơ sở dữ liệu làm tham số thứ tư cho mysqli_connect - bỏ qua nhu cầu gọi mysqli_select_db .

$con = mysqli_connect($host, $username, $password, $dbname);

Vệ sinh thông tin nhập của người dùng

Sử dụng mysqli_real_escape_string rất giống với mysql_real_escape_string . Bạn chỉ cần truyền đối tượng kết nối làm tham số đầu tiên.

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

$value1 = mysqli_real_escape_string($con, $input_string);

Rất quan trọng:Chuẩn bị và Chạy Truy vấn

Một lý do khiến mysql_ ban đầu các hàm không được dùng nữa là do chúng không có khả năng xử lý các câu lệnh đã chuẩn bị. Nếu bạn chỉ chuyển đổi mã của mình thành mysqli_ nếu không thực hiện bước quan trọng này, bạn phải đối mặt với một số điểm yếu lớn nhất của mysql_ chức năng.

Bạn nên đọc các bài viết này về các tuyên bố đã chuẩn bị trước và lợi ích của chúng:

Wikipedia - Tuyên bố chuẩn bị

PHP.net - Câu lệnh chuẩn bị trước của MySQL

Lưu ý:Khi sử dụng các câu lệnh đã chuẩn bị, tốt nhất nên liệt kê rõ ràng từng cột mà bạn đang cố gắng truy vấn, thay vì sử dụng * ký hiệu để truy vấn tất cả các cột. Bằng cách này, bạn có thể đảm bảo rằng bạn đã tính đến tất cả các cột trong lệnh gọi đến mysqli_stmt_bind_result .

mysql_:

$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);
while($row = mysql_fetch_assoc*$result)
{
    $col1 = $row['col1'];
    $col2 = $row['col2'];

    echo $col1 . ' ' . $col2 . '<br />';
}

mysqli_:

$query = 'SELECT col1,col2 FROM table1 WHERE table1.col1=?';
if ($stmt = mysqli_prepare($link, $query)) {

    /* pass parameters to query */
    mysqli_stmt_bind_param($stmt, "s", $value1);

    /* run the query on the database */
    mysqli_stmt_execute($stmt);

    /* assign variable for each column to store results in */
    mysqli_stmt_bind_result($stmt, $col1, $col2);

    /* fetch values */
    while (mysqli_stmt_fetch($stmt)) {
        /*
            on each fetch, the values for each column 
            in the results are automatically stored in 
            the variables we assigned using 
            "mysqli_stmt_bind_result"
        */
        echo $col1 . ' ' . $col2 . '<br />';
    }

    /* close statement */
    mysqli_stmt_close($stmt);
}

Hiển thị lỗi

Hiển thị lỗi hoạt động hơi khác với mysqli_ . mysqli_error yêu cầu đối tượng kết nối làm tham số đầu tiên của nó. Nhưng nếu kết nối không thành công thì sao? mysqli_ giới thiệu một tập hợp nhỏ các hàm không yêu cầu đối tượng kết nối: mysqli_connect_* các chức năng.

mysql_:

if (!$con) {
    die('Could not connect: ' . mysql_error());
}

if (!$result) {
    die('SQL Error: ' . mysql_error());
}

mysqli_:

/* check connection error*/
if (mysqli_connect_errno()) {
    die( 'Could not connect: ' . mysqli_connect_error() );
}

/* check query error */
if ($stmt = mysqli_prepare($link, $query)) {

    // ... execute query

    if (mysqli_stmt_error($stmt)) {
        echo 'SQL Error: ' . mysqli_stmt_error($stmt);
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng bảng điều khiển MySQL thông qua tập lệnh PowerShell

  2. Làm cách nào để tổ chức một loạt các bảng mysql?

  3. làm thế nào để liệt kê kết quả truy vấn mysql theo trình tự cụ thể?

  4. lỗi thay đổi bảng, thêm ràng buộc khóa ngoại gặp lỗi Không thể thêm hoặc cập nhật hàng con

  5. mysql 5.7 lỗi đăng nhập chậm truy vấn