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

mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows etc ... mong muốn tham số 1 là tài nguyên

Một truy vấn có thể không thành công vì nhiều lý do khác nhau, trong trường hợp đó, cả mysql_ * và tiện ích mở rộng mysqli sẽ trả về false từ các hàm / phương thức truy vấn tương ứng của chúng. Bạn cần kiểm tra tình trạng lỗi đó và xử lý nó cho phù hợp.

tiện ích mở rộng mysql_ * :

LƯU Ý Các hàm mysql_ không được dùng nữa và đã bị loại bỏ trong phiên bản php 7.

Kiểm tra $result trước khi chuyển nó tới mysql_fetch_array . Bạn sẽ thấy rằng nó false bởi vì truy vấn không thành công. Xem mysql_query tài liệu cho các giá trị trả lại có thể có và đề xuất về cách đối phó với chúng.

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

tiện ích mở rộng mysqli
phong cách thủ tục :

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo-style :

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

sử dụng một tuyên bố đã chuẩn bị:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

Những ví dụ này chỉ minh họa cái gì nên được thực hiện (xử lý lỗi), chứ không phải làm như thế nào. Mã sản xuất không được sử dụng or die khi xuất ra HTML, nếu không nó sẽ (ít nhất) tạo ra HTML không hợp lệ. Ngoài ra, thông báo lỗi cơ sở dữ liệu sẽ không được hiển thị cho người dùng không phải quản trị viên vì nó tiết lộ quá nhiều thông tin .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm mật khẩu MySQL

  2. pt-query-inherit Alternatives - Quản lý và giám sát truy vấn MySQL với ClusterControl

  3. MySQL không thành công trên:mysql ERROR 1524 (HY000):Plugin 'auth_socket' không được tải

  4. Cách tối ưu hóa bảng MySQL / MariaDB

  5. Chuyển đổi MySQL sang SQlite