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
.