PDA

View Full Version : سوال: شرط موفقیت آیز بودن یا نبودن کوئری insert در pdo



bluetooth153
دوشنبه 05 اسفند 1392, 12: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, 13: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, 13:27 عصر
میشه بیشتر این کد رو توضیح بدید یا با کد من توضیح بدید؟

***BiDaK***
دوشنبه 05 اسفند 1392, 14:08 عصر
قسمت cunstrutor که هیچی.به دیتابیس وصل میشه.یه نکته من شی ء pdo رو در کلاس db ساختم که شما میتونید هرجایی بسازید.
متدی داخل کلاس برای insert نوشتم که کوری به دستور prepare داده میشه.$prefix که پیشوند جداول منه که هیچی.داخل پرانتز اول فیلدهای جداوله و پرانتز دوم بجای مقادیر علامت سوال گذاشته شده که prepare کد رو تحلیل و پردازش میکنه و جلوی sql injection رو میگیره.البته کار از محکم کاری عیب نمیکنه رشته هارو قبلش escape کنید :دی
مقادیر در قالب یک آرایه قرار میگیرن و در execute ریخته میشن و کوئری اجرا میشه.ترتیب مهمه چون این آرایه بجای ؟ قرار میگیره.
()NOW بجای date قرار میگیره.
اگه با موفقیت کوئری انجام بشه rowCount مقدار 1 رو بر میگردونه.
زمانی هم که در page ای از این متد میخوام استفاده کنم هم کدش در page content نوشتم که نتیجش باید 1 بشه تا شرط اجرا بشه.

bluetooth153
دوشنبه 05 اسفند 1392, 15:34 عصر
این متد prepare تو pdo چیکار میکنه؟
اگه من بخوام متد insert کلاس خودم رو مثل شما بکنم باید چکار کنم؟

***BiDaK***
دوشنبه 05 اسفند 1392, 15: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, 18:04 عصر
ممنون دوست عزیز
متوجه شدم تشکر ♥