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

السؤال

نشر

السلام عليكم

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...