Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows dll... mengharapkan parameter 1 menjadi sumber daya

Kueri mungkin gagal karena berbagai alasan dalam hal ini mysql_* dan ekstensi mysqli akan mengembalikan false dari fungsi/metode kueri masing-masing. Anda perlu menguji kondisi kesalahan itu dan menanganinya dengan tepat.

ekstensi mysql_* :

CATATAN fungsi mysql_ tidak digunakan lagi dan telah dihapus di php versi 7.

Centang $result sebelum meneruskannya ke mysql_fetch_array . Anda akan menemukan bahwa itu false karena kueri gagal. Lihat mysql_query dokumentasi untuk kemungkinan nilai pengembalian dan saran tentang cara menanganinya.

$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'];
}

ekstensi mysqli
gaya prosedural :

$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 ) {
        ...

gaya oo :

$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 ) {
      ...

menggunakan pernyataan yang telah disiapkan:

$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 ) {
      ...

Contoh-contoh ini hanya menggambarkan apa harus dilakukan (penanganan kesalahan), bukan bagaimana melakukannya. Kode produksi tidak boleh menggunakan or die saat mengeluarkan HTML, jika tidak maka (paling tidak) akan menghasilkan HTML yang tidak valid. Selain itu, pesan kesalahan basis data tidak boleh ditampilkan kepada pengguna non-admin, karena mengungkapkan terlalu banyak informasi .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panduan untuk memahami pola penskalaan basis data

  2. Cara Menampilkan Susunan Koneksi Anda di MySQL

  3. batas subquery mySQL

  4. Mengimpor data CSV menggunakan PHP/MySQL

  5. Kesalahan Teratas yang Harus Dihindari dalam Replikasi MySQL