30]); echoline($stmt->rowCou ...' /> 30]); echoline($stmt->rowCou ...' />
۳ علی اسدزاده
ارور mysql ران نشدن کد
جامعه پی اچ پی ایجاد شده در ۲۹ بهمن ۱۴۰۱

بعد از ران کردن این کد ....

$sql = "update people set isSingle = 1 where id < : id";
$stmt = $db->prepare($sql);
$stmt->execute(['id'=>30]);
echoline($stmt->rowCount());

با این ارور مواجه شدم....

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\\laragon\\www\\mysqli\\php.mysqli\\PDO\\3-Update.php:13
Stack trace:
#0 C:\\laragon\\www\\mysqli\\php.mysqli\\PDO\\3-Update.php(13): PDOStatement->execute(Array)
#1 {main}
  thrown in C:\\laragon\\www\\mysqli\\php.mysqli\\PDO\\3-Update.php on line 13

سلام علی عزیز

توی متد execute کلید رو اشتباه پاس دادی و دونقطه رو نذاشتی برای بایند شدن.

$stmt->execute([':id'=>30]);
احمدرضا فاطمی کیا ۲۹ بهمن ۱۴۰۱، ۱۱:۱۴

ارور حل نشد

$sql = "update people set isSingle = : isSingle where id < : id";
$stmt = $db->prepare($sql);
$stmt->execute([':id'=>20,"isSingle"=>1]);
echoline($stmt->rowCount());

دو نقطه را قرار دادم ولی حل نشد

راهکار جدید بدین

علی اسدزاده ۳۰ بهمن ۱۴۰۱، ۰۷:۴۶

سلام علی جان

وقتی از pdo برای کئوری زدن استفاده میشه برای امنیت اطلاعاتی در کوئری، اصطلاحا اونا رو bind میکنیم. برای بایند کردن مواردی که میخوایم در کوئری باید به این شکل "key:" استفاده کنیم. حالا وقتی میخوایم مقدار رو به کلید بدیم هم باید به همین شکل باشه و اون ":" رو بزاریم برای اون فیلدهایی که توی کوئوریمون گذاشتیم.

کدتون باید به شکل زیر اصلاح بشه: (با توجه به توضیحات بالا، شما "isSingle" رو بدون ":" استفاده کرده بودید که تصحیح کردم براتون. در ضمن توی خودِ کوئری هم ":" رو با فاصله گذاشته بودین که اشتباهه)

$sql = "UPDATE people SET isSingle = :isSingle WHERE id < :id";
$stmt = $db->prepare($sql);
$stmt->execute([':id'=>20, ':isSingle'=>1]);
echoline($stmt->rowCount());
بهترین پاسخ
صادق برزگر ۳۰ بهمن ۱۴۰۱، ۰۹:۳۶