Hamada Ahmed نشر 5 أبريل 2021 أرسل تقرير مشاركة نشر 5 أبريل 2021 السلام عليكم اريد تحويل هذا الكود الى طريقة (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); ?> اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 بلال زيادة نشر 5 أبريل 2021 أرسل تقرير مشاركة نشر 5 أبريل 2021 يمكنك التحويل بتغيير دوال الأستعلامات بكل ما يساويه في 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 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 Wael Aljamal نشر 6 أبريل 2021 أرسل تقرير مشاركة نشر 6 أبريل 2021 تعمل الدالة 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 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Hamada Ahmed نشر 8 أبريل 2021 الكاتب أرسل تقرير مشاركة نشر 8 أبريل 2021 بتاريخ 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; ?> شكرا اخي لكن تظهر رسالة خطأ اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 بلال زيادة نشر 8 أبريل 2021 أرسل تقرير مشاركة نشر 8 أبريل 2021 بتاريخ 44 دقائق مضت قال Hamada Ahmed: شكرا اخي لكن تظهر رسالة خطأ هذه مجرد امثلة لكيفية تحويل الى bind param لذلك تم وضعها لتفهم كيفية التحويل فقط. اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
Hamada Ahmed
السلام عليكم
اريد تحويل هذا الكود الى طريقة (Prepared statement - bind_param)
ولكم جزيل الشكر
رابط هذا التعليق
شارك على الشبكات الإجتماعية
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.