PDA

View Full Version : چطوری میشه توی PDO اسم یک Column رو به صورت متغییر Binparam



leaping
چهارشنبه 19 فروردین 1394, 16:00 عصر
سلام
چطوری میشه توی PDO اسم یک ستون رو (Column Name) رو به عنوان یک متغییر مثل مقدار یک ستون به وسیله متد Bindparam بایند کرد؟
مثل همچین چیزی

منظورم اینه که اسم خود ستون رو هم به صورت مقدار , مقدار دهی کرد با متغییر


UPDATE `TableName` SET :ColumnName = :ColumnValue

j_naroogha@yahoo.com
چهارشنبه 19 فروردین 1394, 18:00 عصر
http://php.net/manual/en/pdostatement.bindparam.php
با bindparam میشه لینک بالا رو نگا کن...

leaping
چهارشنبه 19 فروردین 1394, 23:12 عصر
http://php.net/manual/en/pdostatement.bindparam.php
با bindparam میشه لینک بالا رو نگا کن...
ممنون
اما
دوست عزیز , خودم در بالا bindparam رو ذکر کردم ولی با این متد فقط میشه value رو بایند کرد و نه نام ستون و یا Column Name رو

j_naroogha@yahoo.com
پنج شنبه 20 فروردین 1394, 08:22 صبح
خب یه راه حل هم اینه که رشته رو با هم جمع کنی
UPDATE `TableName` SET . $col . = :ColumnValue
البته سینتکس ارور داره که خودتون استادین توی رفعش...

MMSHFE
پنج شنبه 20 فروردین 1394, 10:22 صبح
از bindParam نمیشه استفاده کرد چون توی کوتیشن میگذاره و همونطور که میدونید، اسامی فیلدها باید توی Backquote بیاد. میتونید با متد quote (http://php.net/manual/en/pdo.quote.php) اسم فیلد رو Escape کنید و بعد با str_replace کوتیشنها رو به Backquote تبدیل کنید و توی عبارت استفاده کنید. مثال:

$stmt = $pdo->prepare('UPDATE `table` SET ' . str_replace('\'', '`', $pdo->quote($column)) . '=:value');
$stmt->bindParam(':value', $value, PDO::PARAM_STR, 255);
$stmt->execute();

leaping
پنج شنبه 20 فروردین 1394, 10:31 صبح
خب یه راه حل هم اینه که رشته رو با هم جمع کنی
UPDATE `TableName` SET . $col . = :ColumnValue
البته سینتکس ارور داره که خودتون استادین توی رفعش...
ممنون
توی این روش مشکل SI وجود داره که البته دقیقا مطمئن نیستم اما میخواستم از چیزی مثل همون prepare بشه استفاده کرد بازم ممنون از پیگیریت

MMSHFE
پنج شنبه 20 فروردین 1394, 10:47 صبح
با استفاده از متد quote مشکل Injection برطرف میشه.