۶ میلیون تومان تخفیف ویژه🎁 برای پخته‌ترین و کاربردی‌ترین متود آموزشی سون لرن😍 کلیک کن👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ ساناز سلمانی
Fatal error
ساناز سلمانی حل شده توسط ساناز سلمانی
screenshot-2024-12-24-1-qv9ek2t4.png

سلام،

توی تابع bind_param، نوع داده‌ها به این شکل تعریف میشه:

  • i: عدد صحیح (integer)
  • d: عدد اعشاری (float)
  • s: رشته (string)
  • b: داده‌های باینری (blob)

حالا اگه بخوایم طبق کدی که توی ویدیو نوشته شده پیش بریم، کد نهایی اینجوری میشه:

$sql = "INSERT INTO people (fullname,age,sex,isSingle) VALUES (?, ?, ?, ?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('sisi', $user['fullname'], $user['age'], $user['sex'], $user['isSingle']);
محسن موحد ۰۴ دی ۱۴۰۳، ۱۵:۱۳

با سلام

متغیر جنسیت رو من 0 و1 در نظر گرفتم و int  

و چک کردم دیدم این خطا  زمانی که if چک میشه داده میشه

ساناز سلمانی ۰۶ دی ۱۴۰۳، ۱۱:۴۵

بله درست میگید خطا از execute نیست، if رو نگاه ننداختم، شما prepare رو با دستور execute اجرا کردید و نباید دستور query رو اجرا کنید و همچنین query رو نمیتونید قابلیت placeholder یعنی از علامت سؤال استفاده کنید. این قابلیت مربوط به prepare هست و از sql injection جلوگیری میکنه.

بنابراین داخل بعد از execute برای اینکه چک کنید اینسرت بدرستی انجام شده قبل ازینکه close به چند روش میتونید موفقیت اجرای کوئریو متوجه بشید:

روش اول: execute رو داخل if چک کنید:

if($stmt->execute()) {
    echo "insert successful";
} else {
    echo "insert failed: " . $stmt->error;
}
$stmt->close();

روش دوم: بعد از execute:

if($stmt->affected_rows > 0) {
    echo "insert successful";
} else {
    echo "insert failed";
}
$stmt->close();

روش‌های دیگری هم هست مثه چک کردن insert_id.

نکته: دقت کنید که isSingle رو درست نوشته باشید. البته گویا شما به شکل issingle نوشته اید. (بهتره بشکل camelcase بنویسید.)

محسن موحد ۰۶ دی ۱۴۰۳، ۱۵:۴۰

با سلام 

با استفاده از روش اول مشکل حل شد 

ممنون از شما.

بهترین پاسخ
ساناز سلمانی ۰۸ دی ۱۴۰۳، ۱۳:۰۴