View Full Version : سوال: شرط موفقیت آیز بودن یا نبودن کوئری insert در pdo
  
bluetooth153
دوشنبه 05 اسفند 1392, 13:14 عصر
سلام
من یک متد برای insert دارم که مقادیر و فیلد ها رو براش ارسال میکنم . حالا میخوام بدونم چطور میشه یه شرط بزارم و بدونم که کوئری insert م موفقیت آمیز بوده یا به هر دلیل خطایی بوجود اومده. میشه راهنمایی کنید؟
یک تابع تو Mysql بود به نام mysql_errorno() که شماره هر خطا رو بر میگردوند مشابه این تابع تو pdo چی هست؟
یه سوال دیگه هم داشتم . pdo به صورت اتوماتیک رشته رو scape srting میکنه یا برای این کار هم تابع داریم؟
الان کدم این جوری شده : 
$this->_query = " insert into $this->table ($fields) VALUES ($data)";
        $this->_pdo->exec($this->_query);
***BiDaK***
دوشنبه 05 اسفند 1392, 14:11 عصر
یک مثال.
کلاسی که تعریف کردم:
class cManageContent
{
    public $link;
    function __construct()
    {
        $dbConnection = new cDbConnection();
        $this->link = $dbConnection->connect();
        return $this->link;
    }
    public function addContent($title, $short_text, $text, $pic, $visit, $tags, $category_id)
    {
        global $prefix;
        $query = $this->link->prepare('INSERT INTO `'.$prefix.'content` (`title`, `short_text`, `text`, `pic`, `visit`, `tags`, `category_id`, `date`) VALUES (?, ?, ?, ?, ?, ?, ?, NOW())');
        $values = array($title, $short_text, $text, $pic, $visit, $tags,$category_id);
        $query->execute($values);
        //print_r($query->errorInfo());
        $counts = $query->rowCount();
        return $counts;    
    }
}
content page:
$link = new cManageContent();
if ($link->addContent($title, $short_text, $text, $pic, $visit, $tags, $category_id) == 1)
{
                        
    $success = "یک مطلب با موفقیت افزوده شد";
}
else
    .......
bluetooth153
دوشنبه 05 اسفند 1392, 14:27 عصر
میشه بیشتر این کد رو توضیح بدید یا با کد من توضیح بدید؟
***BiDaK***
دوشنبه 05 اسفند 1392, 15:08 عصر
قسمت cunstrutor که هیچی.به دیتابیس وصل میشه.یه نکته من شی ء pdo رو در کلاس db ساختم که شما میتونید هرجایی بسازید.
متدی داخل کلاس برای insert نوشتم که کوری به دستور prepare داده میشه.$prefix که پیشوند جداول منه که هیچی.داخل پرانتز اول فیلدهای جداوله و پرانتز دوم بجای مقادیر علامت سوال گذاشته شده که prepare کد رو تحلیل و پردازش میکنه و جلوی sql injection رو میگیره.البته کار از محکم کاری عیب نمیکنه رشته هارو قبلش escape کنید :دی
مقادیر در قالب یک آرایه قرار میگیرن و در execute ریخته میشن و کوئری اجرا میشه.ترتیب مهمه چون این آرایه بجای ؟ قرار میگیره.
()NOW بجای date قرار میگیره.
اگه با موفقیت کوئری انجام بشه rowCount مقدار 1 رو بر میگردونه.
زمانی هم که در page ای از این متد میخوام استفاده کنم هم کدش در page content نوشتم که نتیجش باید 1 بشه تا شرط اجرا بشه.
bluetooth153
دوشنبه 05 اسفند 1392, 16:34 عصر
این متد prepare تو pdo چیکار میکنه؟
اگه من بخوام متد insert کلاس خودم رو مثل شما بکنم باید چکار کنم؟
***BiDaK***
دوشنبه 05 اسفند 1392, 16:50 عصر
متد prepare کوئری رو اجرا میکنه.
از مثالی که اوردم میتونین استفاده کنین.
یک شی ء هم برای pdo تولید کنید.مثلا:
$pdo = 
                new PDO("mysql:host=$dbHost;dbname=$dbName;", $dbUsername, $dbPass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',));
اگر بازم نتونستید کلاستونو کامل بذارید.
bluetooth153
دوشنبه 05 اسفند 1392, 19:04 عصر
ممنون دوست عزیز 
متوجه شدم تشکر ♥
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.