PDA

View Full Version : مشکل با نمایش اطلاعات دیتابیس



mehdi4467
شنبه 20 دی 1393, 21:37 عصر
سلام
من وقتی می خواهم اطلاعات رو از دیتابیس نمایش بدهم به صورت علامت سوال نمایش داده می شود. البته راجع به این موضوع تاپیک هایی بود ولی مشکل من اینه که کدهام روی یک هاست جواب میده و روی یک هاست دیگه علامت سوال میشه. دلیل اینکه روی یک هاست درست جواب میده و همان کدها روی هاست دیگه جواب نمیده رو می خوام بدونم.
کدها


define('DB_TYPE', 'mysql');
define('DB_PERSISTENCY', 'true');
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'database');
define('DB_CHARSET', 'UTF8');


class Database extends PDO
{
function __construct()
{
parent::__construct(DB_TYPE.':host='.DB_SERVER.';d bname='.DB_DATABASE.';charset='.DB_CHARSET, DB_USERNAME, DB_PASSWORD);
}
}


class Model
{
function __construct()
{
$this->db=new Database();
}
}


$query = $this->db->prepare("SELECT * FROM table WHERE id = $id ");
$query->setFetchMode(PDO::FETCH_NUM);
$query->execute();
$data = $query->fetch();

echo $data[2];

asma69
یک شنبه 21 دی 1393, 01:09 صبح
سلام.
خسته نباشید
من هم یک مشکل مشابه مشکل شما داشتم.
برای من کل اطلاعاتی که به زبان فارسی در دیتابیسم ذخیره شده بود، در موقع نمایش به شکل علامت سوال نمایش داده می شد.
از یکی از دوستام کمک گرفتم و مشکلم حل شد.
4 خط کد برام فرستاد و من این کدها رو در فایل کانفیگ پروژم بعد از کد اتصال به mysqlقرار دادم.
من با این روش برنامه نویسی شما آشنا نیستم و یه مدل دیگه کدهامو نوشتم.
کدهای صفحه کانفیگم رو در زیر براتون قرار می دم. شما به روش خودتون ازش استفاده کنید
مشکل من که حل شد، امیدوارم برای شما هم مفید باشه.
<?php
mysql_connect("localhost","root","");
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET character_set_client=utf8");
mysql_query("SET character_set_results=NULL");
mysql_query("SET character_set_connection=utf8");
mysql_select_db("databasename")or die("خطای ارتباط با بانک");
?>
همین 4 خط قرمز رنگ رو اضافه کردم.

asma69
یک شنبه 21 دی 1393, 01:13 صبح
کدهای بالا راست چین شده، زحمت بکشید و چپ چینشون کنید تا درست نمایش داده شه.
راستی ی سوال؟
شما از چه روشی برای برنامه نویسیتون استفاده کردین؟
من راجب روش mvc شنیدم، اما نمی دونم چطوریه.
آیا این روش برنامه نویسی شما هم mvc هست یا نه؟
ممنون

mehdi4467
یک شنبه 21 دی 1393, 07:39 صبح
من کلاس Model رو به شکل زیر تغییر دادم ولی مشکل حل نشد:


class Model
{
function __construct()
{
$this->db=new Database();
$this->dh->prepare("SET CHARACTER SET 'utf8'");
$this->dh->prepare("SET character_set_client=utf8");
$this->dh->prepare("SET character_set_results=NULL");
$this->dh->prepare("SET character_set_connection=utf8");

}
}





راستی ی سوال؟
شما از چه روشی برای برنامه نویسیتون استفاده کردین؟
من راجب روش mvc شنیدم، اما نمی دونم چطوریه.
آیا این روش برنامه نویسی شما هم mvc هست یا نه؟
ممنون
بله من به روش MVC برنامه نوشته ام. در این روش کدها در سه بخش قالب،دیتابیس و کنترلر تقسیم بندی می شوند و مزایای بسیاری دارد. مثلا در قالی اثری از کدهاتون دیده نمی شه و فقط متغیرها به آن پاس می شوند.

hamedarian2009
یک شنبه 21 دی 1393, 10:13 صبح
سلام
من وقتی می خواهم اطلاعات رو از دیتابیس نمایش بدهم به صورت علامت سوال نمایش داده می شود. البته راجع به این موضوع تاپیک هایی بود ولی مشکل من اینه که کدهام روی یک هاست جواب میده و روی یک هاست دیگه علامت سوال میشه. دلیل اینکه روی یک هاست درست جواب میده و همان کدها روی هاست دیگه جواب نمیده رو می خوام بدونم.
کدها


define('DB_TYPE', 'mysql');
define('DB_PERSISTENCY', 'true');
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'database');
define('DB_CHARSET', 'UTF8');


class Database extends PDO
{
function __construct()
{
parent::__construct(DB_TYPE.':host='.DB_SERVER.';d bname='.DB_DATABASE.';charset='.DB_CHARSET, DB_USERNAME, DB_PASSWORD);
}
}


class Model
{
function __construct()
{
$this->db=new Database();
}
}


$query = $this->db->prepare("SELECT * FROM table WHERE id = $id ");
$query->setFetchMode(PDO::FETCH_NUM);
$query->execute();
$data = $query->fetch();

echo $data[2];
utf8 رو با حروف کوچیک بنویسین ببینید درست میشه

asma69
یک شنبه 21 دی 1393, 10:27 صبح
سلام.
مرسی از پاسخی که به سوالم دادین.
در رابطه با کدتون هم راستش من با این روش اشنا نیستم. ولی مشکل من با این کد حل شد.
ولی یک بررسی که کدهاتون رو کردم یک پیشنهاد دیگه هم به ذهنم اومد اما نمی دونم درسته یا نه، ولی خوب امتحان کردنش ضرر نداره.
قسمت بالا کد زیر رو دیدم
define('DB_CHARSET', 'UTF8');
امتحان کنید ببینید میشه مثل این قسمت اون کدایی که من فرستادم رو تغییر بدین یا نه؟
ببینید نتیجه می ده یا نه؟
اگه نه این راه رو هم امتحان کنید:
این که اون کدایی که توی کلاس model قرار دادین رو :
$this->dh->prepare("SET CHARACTER SET 'utf8'");
$this->dh->prepare("SET character_set_client=utf8");
$this->dh->prepare("SET character_set_results=NULL");
$this->dh->prepare("SET character_set_connection=utf8");
داخل کلاس construct() بگزارید.
امیدوارم به نتیجه برسین.

nasirb
یک شنبه 21 دی 1393, 11:05 صبح
آیا جدولی که ساختید collation آن را روی utf-8 general-ci گذاشتید ؟ سعی کنید که فیلد هایی از جدول هم که دارای اطلاعات فارسی هستند را به صورت utf-8 general-ci قرار بدهید .

mehdi4467
یک شنبه 21 دی 1393, 17:31 عصر
کد رو به این شکل عوض کردم درست شد.


parent::__construct(DB_TYPE.':host='.DB_SERVER.';d bname='.DB_DATABASE.';charset='.DB_CHARSET, DB_USERNAME, DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));