اذهب إلى المحتوى
  • 0

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

Hamada Ahmed

السؤال

السلام عليكم

اريد تحويل هذا الكود الى طريقة (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); 
    ?>

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 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

تعمل الدالة 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();

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 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 لذلك تم وضعها لتفهم كيفية التحويل فقط.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...