Admin Paneli Bağlantı Hatası
Merhabalar,
xampp eski sürümümünde web sitem sorunsuz açılıyordu yanlış hatırlamıyorsam sürüm 6 ya da 7 di. Şimdi 8 e güncelledim ve admin paneline giriş yapmak istediğim zaman ekteki hatayı alıyorum;
"
Fatal error: Uncaught mysqli_sqFatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?' at line 1 in C:\xampp\htdocs\a\panel\login.php:130 Stack trace: #0 C:\xampp\htdocs\yahyairis\nedmin\login.php(130): mysqli_query(Object(mysqli), 'SELECT username...') #1 {main} thrown in C:\xampp\htdocs\a\panel\login.php on line 130
"
Eski sürümde problemsiz çalışıyor, ne yapmam gerekiyor?
<?php ob_start();
session_start();
// LOGIN SCRIPT
/* DATABASE CONNECTION*/
$db['db_host'] = 'localhost';
$db['db_user'] = 'root';
$db['db_pass'] = '';
$db['db_name'] = 'test';
foreach($db as $key=>$value){
define(strtoupper($key),$value);
}
global $conn;
$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
if(!$conn){
die("Cannot Establish A Secure Connection To The Host Server At The Moment!");
}
try{
$db = new PDO('mysql:dbhost=localhost;dbname=test;charset=utf8','root','');
}
catch(Exception $e){
die('Cannot Establish A Secure Connection To The Host Server At The Moment!');
}
/*DATABASE CONNECTION */
// Define variables and initialize with empty values
$username = $password = "";
$username_err = $password_err = "";
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Check if username is empty
if(empty(trim($_POST["username"]))){
$username_err = 'Kullanıcı Adınızı Girini!.';
} else{
$username = trim($_POST["username"]);
}
// Check if password is empty
if(empty(trim($_POST['password']))){
$password_err = 'Şifrenizi Giriniz!';
} else{
$password = trim($_POST['password']);
}
// Validate credentials
if(empty($username_err) && empty($password_err)){
// Prepare a select statement
$sql = "SELECT username, password FROM admin WHERE username = ? ";
if($stmt = mysqli_prepare($conn, $sql)){
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "s", $param_username);
// Set parameters
$param_username = $username;
// Attempt to execute the prepared statement
if(mysqli_stmt_execute($stmt)){
// Store result
mysqli_stmt_store_result($stmt);
// Check if username exists, if yes then verify password
if(mysqli_stmt_num_rows($stmt) == 1){
// Bind result variables
mysqli_stmt_bind_result($stmt, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
/* Password is correct, so start a new session and
save the username to the session */
$_SESSION['username'] = $username;
// $sql = "SELECT department FROM employees WHERE username='$username'" ;
$statement = mysqli_query($conn, $sql);
header("Location: index.php");
// Close statement
//mysqli_stmt_close($statement);
//header("location: sales");
} else{
// Display an error message if password is not valid
$password_err = 'Girdiğiniz şifre geçerli değildi. Lütfen tekrar deneyin.';
}
}
} else{
// Display an error message if username doesn't exist
$username_err = 'Bu kullanıcı adına sahip bir hesap bulunamadı. Lütfen yeniden kontrol edin ve tekrar deneyin.';
}
} else{
echo "Oops! Bir şeyler yanlış gitti. Lütfen daha sonra tekrar deneyiniz.";
}
}
// Close statement
mysqli_stmt_close($stmt);
}
// Close connection
mysqli_close($conn);
}
?>
<!--- LOGIN SCRIPT----->
Çok da detaylı inceleyemedim ama sanki şu satırların sıralaması hatalı:
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "s", $param_username);
// Set parameters
$param_username = $username;
Yani $param_username
değişkenine henüz değer atamamışken bind etmeye çalışıyor olabilirsin. Bu da "?" karakteri yerine değer girilememesine neden oluyordur. Çünkü aldığın hata da "?" ile alakalı:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?' at line 1