تواجه مشاكل في إدخال وتحديث الجداول في قاعدة البيانات مع البيانات المعدة

StackOverflow https://stackoverflow.com/questions/652960

  •  19-08-2019
  •  | 
  •  

سؤال

وجديدة جدا لPHP5 وبعض المشاكل لا تزال. فكنت أحسب كيفية تحديد مع البيانات المعدة تحاول الآن لإدراج / تحديث قانون بلدي على النحو التالي

function input_lab_results($name, $image, $descrip) {
    $query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";

    if($stmt = $this->conn->prepare($query)){
        $stmt->bind_param('sssiidd', $name, $image, $descrip, 0, 0, date("Ymd"), date("Ymd"));
        $stmt->execute();
        die();
    } else{
        die($this->conn->error);
    }
}

والخطأ وأنا على الحصول هو

<اقتباس فقرة>   

خطأ فادح: لا يمكن تمرير المعلمة 4 بالرجوع أتش تي أم أل / فئات / mySQL.php على خط 43

وأي مساعدة / سيكون موضع تقدير المراجع. شكرا لك.


والجميع بالذكر باستخدام PDO، هل الرجال قد أي دروس جيدة أو أمثلة على هذا من فضلك؟

هل كانت مفيدة؟

المحلول 2

ولقد غيرت ل

function input_lab_results($name, $image, $descrip) {
    $query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";

    if($stmt = $this->conn->prepare($query)){
        $stmt->bind_param('sssdd', $name, $image, $descrip, date("Ymd"), date("Ymd"));
        $stmt->execute();
        die();
    } else{
        die($this->conn->error);
    }
}

وأساسا أنا تغيرت حيث كان يقرأ ؟؟ لعدد صحيح إلى 0 في الاستعلام لم أكن ربط ذلك.

نصائح أخرى

وانها ليست $descrip هذه هي المشكلة. انها 0S (معلمات 4 و 5). الحل هو لتمرير المتغيرات بدلا من الأعداد الصحيحة:

 `$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";`

    $pat_doctor = 0;
    $pat_resident = 0;

    if($stmt = $this->conn->prepare($query)){
            $stmt->bind_param('sssiidd', $name, $image, $descrip, $pat_doctor, $pat_resident, date("Ymd"), date("Ymd"));`

والواضح mysqli_bind_param يريد حججها كما يشير لذلك فإنه يبحث عن حيث يتم تخزينها في الذاكرة بدلا من نسخ قيمهم. هذا الأمر يبدو معقولا تماما عن بعض الأشياء التي ترغب في ربط عبارة SQL، مثل تلك الصورة، وربما كبيرة بما يكفي أنك لا ترغب في الحصول على نسخ الزائدة يركض. الحرفية، سلسلة أو غير ذلك، لا يمكن الوصول إليها من قبل المرجعية. راجع: http://us.php.net/references

وأنا لا أقترح الصعب ترميز 0S في عبارة SQL، كما أنه يخلط بين داع التعليمات البرمجية.

واسمحوا لي أن أقترح شركة تنمية نفط عمان، بالمناسبة. بناء الجملة هو أكثر من تعقلا.

لا تستخدم bind_param - إنها واجهة unintuitive جدا وعرضة للخطأ، والتي هي في الغالب إرثا من وراء C-API. استخدام bind_value أو الأفضل من ذلك - تمرير مجموعة من القيم كحجة ل PDOStatement->execute . على سبيل المثال:

$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";
if ($stmt = $this->conn->prepare($query)) {
  $stmt->execute(array($name, $image, $descrip, date("Ymd"), date("Ymd")));
  die();
} else {
  die($this->conn->error);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top