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.
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
.