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