• 0

تأمين الأكواد على طريقة (Prepared statement - bind_param)

السلام عليكم

اريد تحويل هذا الكود الى طريقة (Prepared statement - bind_param)

ولكم جزيل الشكر

<?php
    if (!isset($_SESSION['loggedin'])) 
       {
       $session = session_id();
       }
     else 
         {
         $session = $_SESSION['id'];
         }  
    $time = time();
    $time_check = $time-10;     //We Have Set Time 5 Minutes

    $sql = "SELECT * FROM online_users WHERE session='$session'";
    $result = mysqli_query($db, $sql);
    $count  = mysqli_num_rows($result); 

    //If count is 0 , then enter the values
    if ($count == "0") 
    { 
    $sql1    = "INSERT INTO online_users(session, time)VALUES('$session', '$time')"; 
    $result1 = mysqli_query($db, $sql1);
    } else 
       {
      $sql2    = "UPDATE online_users SET time='$time' WHERE session = '$session'"; 
      $result2 = mysqli_query($db, $sql2); 
       }

    $sql3   = "SELECT * FROM online_users";
    $result3 = mysqli_query($db, $sql3); 
    $count_user_online = mysqli_num_rows($result3);
    echo 'online now : '.$count_user_online.' visitor ';  
    $sql4    = "DELETE FROM online_users WHERE time<$time_check"; 
    $result4 = mysqli_query($db, $sql4); 
    ?>

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

يمكنك التحويل بتغيير دوال الأستعلامات بكل ما يساويه في 

Prepared Statement Bind Param

فعملية الأتصال بقاعدة البيانات تكون بهذا الشكل 

$mysqli = new mysqli( 'hostname', 'username', 'password', 'database' );

و في عملية جلب البيانات تكون 

$stmt = $mysqli -> prepare('SELECT * FROM users WHERE id = ?');
$userId = 2;
$stmt -> bind_param('i', $userId);
$stmt = $mysqli -> prepare('SELECT name, email FROM users WHERE id = ?');
$userId = 1; 
$stmt -> bind_param('i', $userId);
$stmt -> execute();
$stmt -> store_result();
$stmt -> bind_result($name, $email);
$stmt -> fetch();
echo $name; 
echo $email; 

ولجلب أكثر من سجل نستخدم 

$stmt = $mysqli -> prepare('SELECT name, email FROM users');

$stmt -> execute();
$stmt -> store_result();
$stmt -> bind_result($name, $email);

while ($stmt -> fetch()) {
	echo $name;
	echo $email;
}

و في حالة الكود الخاص بك 

<?php
$mysqli = new mysqli( 'hostname', 'username', 'password', 'database' );

    if (!isset($_SESSION['loggedin'])) 
       {
       $session = session_id();
       }
     else 
         {
         $session = $_SESSION['id'];
         }  
    $time = time();
    $time_check = $time-10;     //We Have Set Time 5 Minutes

    //$sql = "SELECT * FROM online_users WHERE session='$session'";
    //$result = mysqli_query($db, $sql);
	$stmt = $mysqli->prepare("SELECT * FROM online_users WHERE session=?");
	$stmt->bind_param('i', $session);
	$stmt->execute();
    
	
	//$count  = mysqli_num_rows($result); 
	$count  = $stmt->num_rows;
	
    //If count is 0 , then enter the values
    if ($count == "0") 
    { 
    //$sql1    = "INSERT INTO online_users(session, time)VALUES('$session', '$time')"; 
    ///$result1 = mysqli_query($db, $sql1);
	
	
	$stmt = $mysqli->prepare("INSERT INTO online_users(session, time)VALUES(?,?)");
	$stmt->bind_param('ss', $session, $time);
	$stmt->execute();
	
	
    } else 
       {
		//$sql2    = "UPDATE online_users SET time='$time' WHERE session = '$session'"; 
		//$result2 = mysqli_query($db, $sql2); 
	  
	  
		$stmt = $mysqli -> prepare('UPDATE online_users SET time=? WHERE session = ?');
		$stmt -> bind_param('si', $time, $session);
		$stmt -> execute();
	  
	  
       }

    //$sql3   = "SELECT * FROM online_users";
    //$result3 = mysqli_query($db, $sql3); 
	$stmt = $mysqli->prepare("SELECT * FROM online_users");
	$stmt->execute();
	
    ////$count_user_online = mysqli_num_rows($result3);
	$count_user_online  = $stmt->num_rows;
    echo 'online now : '.$count_user_online.' visitor ';  
	
	
    //$sql4    = "DELETE FROM online_users WHERE time<$time_check"; 
    //$result4 = mysqli_query($db, $sql4); 
	
	$stmt = $mysqli -> prepare('DELETE FROM online_users WHERE time<?');

	$stmt -> bind_param('i', $time_check);
	$stmt -> execute();

	// number of deleted rows
	echo $stmt->affected_rows;
	
	
?>

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

تعمل الدالة bind_param على استبدال إشارات الاستفهام الموجودة في الاستعلام SQL بالمتغيرات التي تمرر لها على الترتيب

كما أن لكل نمط بيانات رمز مكافئ له يمرر كوسيط أول لتتم عملية تحويل الأنماط بطريقة سليمة.

الأنماط المستخدمة و الرموز:

i - integer
d - double
s - string
b - BLOB  // BLOB, or Binary Large Object

مثال لتمرير 3 سلاسل نصية:

// prepare and bind

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
__________________^^^^^

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";

// التنفيذ
$stmt->execute();

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ On ٥‏/٤‏/٢٠٢١ at 21:59 قال بلال زيادة:

يمكنك التحويل بتغيير دوال الأستعلامات بكل ما يساويه في 


Prepared Statement Bind Param

فعملية الأتصال بقاعدة البيانات تكون بهذا الشكل 


$mysqli = new mysqli( 'hostname', 'username', 'password', 'database' );

و في عملية جلب البيانات تكون 


$stmt = $mysqli -> prepare('SELECT * FROM users WHERE id = ?');
$userId = 2;
$stmt -> bind_param('i', $userId);

$stmt = $mysqli -> prepare('SELECT name, email FROM users WHERE id = ?');
$userId = 1; 
$stmt -> bind_param('i', $userId);
$stmt -> execute();
$stmt -> store_result();
$stmt -> bind_result($name, $email);
$stmt -> fetch();
echo $name; 
echo $email; 

ولجلب أكثر من سجل نستخدم 


$stmt = $mysqli -> prepare('SELECT name, email FROM users');

$stmt -> execute();
$stmt -> store_result();
$stmt -> bind_result($name, $email);

while ($stmt -> fetch()) {
	echo $name;
	echo $email;
}

و في حالة الكود الخاص بك 


<?php
$mysqli = new mysqli( 'hostname', 'username', 'password', 'database' );

    if (!isset($_SESSION['loggedin'])) 
       {
       $session = session_id();
       }
     else 
         {
         $session = $_SESSION['id'];
         }  
    $time = time();
    $time_check = $time-10;     //We Have Set Time 5 Minutes

    //$sql = "SELECT * FROM online_users WHERE session='$session'";
    //$result = mysqli_query($db, $sql);
	$stmt = $mysqli->prepare("SELECT * FROM online_users WHERE session=?");
	$stmt->bind_param('i', $session);
	$stmt->execute();
    
	
	//$count  = mysqli_num_rows($result); 
	$count  = $stmt->num_rows;
	
    //If count is 0 , then enter the values
    if ($count == "0") 
    { 
    //$sql1    = "INSERT INTO online_users(session, time)VALUES('$session', '$time')"; 
    ///$result1 = mysqli_query($db, $sql1);
	
	
	$stmt = $mysqli->prepare("INSERT INTO online_users(session, time)VALUES(?,?)");
	$stmt->bind_param('ss', $session, $time);
	$stmt->execute();
	
	
    } else 
       {
		//$sql2    = "UPDATE online_users SET time='$time' WHERE session = '$session'"; 
		//$result2 = mysqli_query($db, $sql2); 
	  
	  
		$stmt = $mysqli -> prepare('UPDATE online_users SET time=? WHERE session = ?');
		$stmt -> bind_param('si', $time, $session);
		$stmt -> execute();
	  
	  
       }

    //$sql3   = "SELECT * FROM online_users";
    //$result3 = mysqli_query($db, $sql3); 
	$stmt = $mysqli->prepare("SELECT * FROM online_users");
	$stmt->execute();
	
    ////$count_user_online = mysqli_num_rows($result3);
	$count_user_online  = $stmt->num_rows;
    echo 'online now : '.$count_user_online.' visitor ';  
	
	
    //$sql4    = "DELETE FROM online_users WHERE time<$time_check"; 
    //$result4 = mysqli_query($db, $sql4); 
	
	$stmt = $mysqli -> prepare('DELETE FROM online_users WHERE time<?');

	$stmt -> bind_param('i', $time_check);
	$stmt -> execute();

	// number of deleted rows
	echo $stmt->affected_rows;
	
	
?>

 

شكرا اخي لكن تظهر رسالة خطأ

 

Capture.PNG

Captuسre.PNG

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ 44 دقائق مضت قال Hamada Ahmed:

شكرا اخي لكن تظهر رسالة خطأ

 

Capture.PNG

Captuسre.PNG

هذه مجرد امثلة لكيفية تحويل الى bind param لذلك تم وضعها لتفهم كيفية التحويل فقط.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن