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

خطاء Call to a member function bind_param() on bool في اللايف سيرفر فقط

محمد المصري12

السؤال

سلام عليكم

اواجه هذا الخطأ فقط في ال live لكن على الللوكال سيرفر الدنيا شغاله جدا

PHP Fatal error:  Uncaught Error: Call to a member function bind_param() on bool

الكود

  $name = mysqli_real_escape_string($conn,$_POST['name']);

        $defaultLang = mysqli_real_escape_string($conn,$_POST['defaultLang']);

        $section = mysqli_real_escape_string($conn,$_POST['section']);

        $workTitle = mysqli_real_escape_string($conn,$_POST['workTitle']);

        $hiring = mysqli_real_escape_string($conn,$_POST['hiring']);

        $permission = mysqli_real_escape_string($conn,$_POST['permission']);

        $username = mysqli_real_escape_string($conn,$_POST['username']);

        $password =  mysqli_real_escape_string($conn,password_hash($_POST['password'], PASSWORD_DEFAULT));

        $email = mysqli_real_escape_string($conn,$_POST['email']);

        $created_by = mysqli_real_escape_string($conn,$_POST['created_by']);

        $created_at = mysqli_real_escape_string($conn,date('Y-d-m'));


        if (isset($_FILES['image']['name'])) {

            $filename = $_FILES['image']['name'];

            // Valid extension
            $valid_ext = array('png','jpeg','jpg');

            $image = time() . $_FILES['image']['name'];

            // Location

            $location = '../assets/images/' . $image;
            // file extension
            $file_extension = pathinfo($location, PATHINFO_EXTENSION);
            $file_extension = strtolower($file_extension);

            // Check extension
            if(in_array($file_extension,$valid_ext)){

                // Compress Image
                compressImage($_FILES['image']['tmp_name'],$location,35);
                $imageAdds = $image;

            }
            else {
                exit ;
            }
        }
        else{
            $imageAdds = 'bee.png';
        }

if (mysqli_num_rows($chkUSR) > 0){
    echo 'userFound';
    exit;
}

if (mysqli_num_rows($chkMAIL) > 0){
    echo 'emailFound';
    exit;
}


$stmt = $conn->prepare( "INSERT INTO users(first_name,lang, section, title, hiring, permission, profile_image, username, password, email,created_at,verified_at,created_by) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) ");
        echo $conn->error;

$stmt->bind_param("sssssssssssss", $name,$defaultLang,$section,$workTitle,$hiring,$permission,$imageAdds,$username,$password,$email,$created_at,$created_at,$created_by);

//----

//$result = $conn->query("INSERT INTO users(first_name,lang, section, title, hiring, permission, profile_image, username, password, email,created_at,verified_at,created_by) VALUES ('$name','$defaultLang','$section','$workTitle','$hiring','$permission','$imageAdds','$username','$password','$email','$created_at','$created_at','$created_by')");

        if ($stmt->execute()) {
            echo "done";
        } else{
            echo "Errormessage: %s\n". $conn->error;
        }

الخطأ يشير الى هذا السطر

$stmt->bind_param("sssssssssssss", $name,$defaultLang,$section,$workTitle,$hiring,$permission,$imageAdds,$username,$password,$email,$created_at,$created_at,$created_by);

ما المشكلة فضلا 

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

Recommended Posts

  • 0

شرح المشكلة:

عند إستدعاء التابع: bind_param

$stmt->bind_param("sssssssssssss", $name,$defaultLang,$section,$workTitle,$hiring,$permission,$imageAdds,$username,$password,$email,$created_at,$created_at,$created_by);

يجب أن يُستدعى إنطلاقاً من كائن من النوع mysqli_stmt لكن حالياً يتم إستدعاؤه من خلال متغير يحمل قيمة بوليانية false. أي أن stmt ليس من النوع mysqli_stmt و إنما bool ما يعني أن ما يُعيده السطر:

$conn->prepare( "INSERT INTO users(first_name,lang, section, title, hiring, permission, profile_image, username, password, email,created_at,verified_at,created_by) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) ");

هو false حيث أن تهيئة الإستعلام فشلت لسبب ما.

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

  • 0
بتاريخ 1 دقيقة مضت قال محمد المصري5:

طيب حلها ايه اخي الكريم

لا أدري ما السبب، لم أتمكن من تحديده إنطلاقاً من الكود، رُبما إختلاف إصدار PHP بين البيئتين أدى لظهور هذا الخطأ. جرب إستخدام نفس الإصدار الذي تستخدمه محلياً.

على كل الأحوال يُفضل إستخدام PDO بدل mysqli و إتباع نهج البرمجة كائنية التوجه.

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

  • 0
بتاريخ On 2‏/10‏/2022 at 19:08 قال سمير عبود:

لا أدري ما السبب، لم أتمكن من تحديده إنطلاقاً من الكود، رُبما إختلاف إصدار PHP بين البيئتين أدى لظهور هذا الخطأ. جرب إستخدام نفس الإصدار الذي تستخدمه محلياً.

على كل الأحوال يُفضل إستخدام PDO بدل mysqli و إتباع نهج البرمجة كائنية التوجه.

اخي ماذا يعني stmt  وconn  هل هما متغيرات لانه لحظت في pdo يتم استخدامهم كثيرا

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

  • 0
بتاريخ 7 ساعة قال ايمن ميلاد:

اخي ماذا يعني stmt  وconn  هل هما متغيرات لانه لحظت في pdo يتم استخدامهم كثيرا

عند استخدام PDO (PHP Data Objects) للتفاعل مع قواعد البيانات، يتم استخدام $stmt و $conn كمتغيرات شائعة.

حيث أن $stmt (Statement) يستخدم لتمثيل البيانات المستعلمة (query) أو العبارة التي تقوم بتنفيذها على قاعدة البيانات باستخدام PDO،  فبعد تحضير الاستعلام وتنفيذه، تستطيع استخدام $stmt لاسترجاع النتائج أو التحكم في تأثير الاستعلام.

أما $conn (Connection) هو متغير يستخدم لتمثيل اتصال PDO بقاعدة البيانات، ونستخدمه لتنفيذ الاستعلامات أو التفاعل مع قاعدة البيانات.

مثال على كيفية استخدامهم:

// الاتصال بقاعدة البيانات
$dsn = "mysql:host=localhost;dbname=mydatabase";
$username = "username";
$password = "password";
$options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
);

try {
    $conn = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}

// استعلام
$sql = "SELECT * FROM mytable WHERE column = :value";
$stmt = $conn->prepare($sql);

// تمرير القيمة
$value = "some_value";
$stmt->bindParam(':value', $value);

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

// استخدام نتائج الاستعلام
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // فعل شيء مع البيانات
}

// إغلاق الاتصال
$conn = null;
رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...