راهنما گام به گام PHP و MYSQL

ارسال شده توسط administrator
17. جانفييه 2012 22:37

 

Mysql پرطرفدارترین سیستم پایگاه داده متن باز است.

Mysql چیست؟

·         سیستم پایگاه داده متن باز

·         مانند بیشتر سیستم های مدیریت پایگاه داده مدرن مبتنی بر مدل رابطه ای، RDBMS، است.

·         روی لینوکس، ویندوز، Netware، AIX و غیره اجرا می شود.

·         با زبانهایی مانند PHP به اسانی در دسترس است.

چرا Mysql؟

·         پایگاه داده متن باز است.

·         کارایی و درجه اطمینان بالا

·         سهولت استفاده

·         دسترس پذیری زیاد(high-availability)

·         طراحی برنامه جامع

·         سهولت مدیریت

·         هزینه خیلی پایین خرید

نحوه دریافت

·         برای دانلود به سایت رسمی ان mysql.com مراجعه کنید

 

اتصال به پایگاه داده

در این بخش با تابع mysql_connect() آشنا می شویم. از این تابع برای اتصال به پایگاه داده Mysql استفاده می شود.

ساختار تابع:

1

mysql_connect(host name, user name, password)

mysql_connect() در صورت موفقیت true را بر می گرداند در غیر این صورت false را. مثال:

01

<?

02

//the example of MySQL database connection

 

03

//connect.php

04

$continued = mysql_connect("localhost","root","admin");

 

05

if ($continued) {

06

    echo ("Connection is succeed")

 

07

} else {

08

    echo ("Connection is fail")

 

09

}

10

?>

 

ساخت پایگاه داده

از تابع Mysql_create_db()  برای ساخت پایگاه داده استفاده می کنیم. معمولا، پایگاه داده را در برنامه استفاده می کنیم و دارای یک یا چند جدول است.

ساختار Mysql_create_db()

1

mysql_create_db("database")

فایلی به نام Create.php داخل پوشه www بسازید و کد زیر را وارد کنید:

01

<?

02

//the example of making MySQL database

 

03

//create.php

04

$continued = mysql_connect("localhost","root","admin");

 

05

if($continued){

06

    echo("Connection is succeed");

 

07

}else{

08

    echo("Connection is fail");

 

09

}

10

$make = mysql_create_db("data_root");

 

11

if($make){

12

    echo("<br><br>Database data_root succeeds in making");

 

13

}else{

14

    echo("<br><br>Database data_root fails in making");

 

15

}

16

?>

ساخت جدول

PHP تابع مخصوصی برای ساخت جدول با فیلدهای معین ندارد. بنابراین برای ساخت جدول داده، از دستور برنامه پایگاه داده مانند MySQL استفاده می شود، این دستور با تابع mysql_query() اجرا می شود.

برای مثال، پایگاه داده Employee برای یک دفتر را ساخته، یک جدول با ستون های employee number، employee name و  employee address می سازیم.

فایلی به نام Create_table.php داخل www بسازید. کد زیر را در ان کپی کنید:

01

<?

02

//the example of making MySQL database table

 

03

//create_table.php

04

$continued = mysql_connect("localhost","root","admin");

 

05

if($continued){

06

    echo("Connection is succeed");

 

07

}else{

08

    echo("Connection is fail");

 

09

}

10

$make = mysql_create_db("employees");

 

11

if($make){

12

    echo("<br><br>Employees database succeeds in making");

 

13

}else{

14

    echo("<br><br>Employees database fails in making");

 

15

}

16

$order1 = "CREATE TABLE data_employees

 

17

    (

18

        employees_number int(10)AUTO_INCREMENT PRIMARY KEY,

 

19

        name char(100),

20

        address varchar(255)

 

21

    )";

22

$make_table = mysql_db_query("employees",$order1);

 

23

if($make_table){

24

    echo("<br><br>Table data_employees succeeds in making");

 

25

}else{

26

    echo("<br><br>Table data_employees fails in making");

 

27

}

28

?>

نوع داده فیلد ها

نوع داده عددی

نوع داده

Gyration assess

TINYINT

(-128) - 127 or 0 - 255

SMALLINT

(-32768) - 32767 or 0 - 65535

MEDIUMINT

(-8388608) - 8388607 or 0 - 16777215

INT

(-2147683648) - 2147683647 or 0 - 4294967295

BIGINT

(-9223372036854775808) - 9223372036854775807 or 0 - 18446744073709551615

FLOAT(X)

(-3.402823466E+38) - (-1.175494351E-38), 0, and 1.175494351E-38 - 3.402823466E+38.

FLOAT

The same as above

DOUBLE

(-1.7976931348623157E+308) - (-2.2250738585072014E-308), 0, and 2.2250738585072014E-308 - 1.7976931348623157E+308

 

میزان حافظه مورد نیاز متغیر ها در جدول زیر امده است:

نوع داده

حافظه مورد نیاز

TINYINT

1 byte

SMALLINT

2 bytes

MEDIUMINT

3 bytes

INT

4 bytes

INTEGER

4 bytes

BIGINT

8 bytes

FLOAT(X)

4 ifX <=24 or 8 if 25 <=X <=53

FLOAT

4 bytes

DOUBLE

8 bytes

DOUBLE PRECISION

8 bytes

REAL

8 bytes

DECIMAL(M,D)

M+2 bytes if D>0, M+1 bytes if D=0(D+2, if M<d)< td=""></d)<>

NUMERIC(M,D)

M+2 bytes if D>0, M+1 bytes if D=0(D+2, if M<d)< td=""></d)<>

نوع داده رشته ای

نوع داده

Gyration assess

CHAR

1-255 character

VARCHAR

1-255 character

TINYLOB, TINYTEXT

1-255 character

BLOB, TEXT

1-65535 character

MEDIUMLOB, MEDIUMTEXT

1-16777215 character

LONGLOB, LONGTEXT

1-4294967295 character

ENUM('element1','element2',...)

Maximal 65535 character

SET('element1','element2',...)

Maximal 64 element

میزان حافظه مورد نیاز:

نوع داده

حافظه مورد نیاز

CHAR(M)

M bytes, 1 <=M <=255

VARCHAR(M)

L+1 bytes, L <=M and 1 <=M <=255

TINYLOB, TINYTEXT

L+1 bytes, L <2^8

BLOB, TEXT

L+2 bytes, L<2^16

MEDIUMLOB, MEDIUMTEXT

L+3 bytes, L<2^24

LONGBLOB, LONGTEXT

L+4 bytes, L<2^32

ENUM('element1','element2',...)

1 or 2 bytes, depend to the number of element

SET('element1','element2',...)

1, 2, 3, 4 or 8 bytes, depend to the number of element

 

نوع داده تاریخ

نوع داده

Gyration assess

DATETIME

'1000-01-01 00:00:00' to '9999-12-31 23:59:59'

DATE

'1000-01-01' to '9999-12-31'

TIMESTAMP

'1970-01-01 00:00:00' - 2037

TIME

'-838:59:59' to '838:59:59'

YEAR

1901 - 2155

میزان حافظه مورد نیاز:

 

نوع داده

حافظه مورد نیاز

DATE

3 bytes

DATETIME

8 bytes

TIMESTAMP

4 bytes

TIME

3 bytes

YEAR

1 bytes

 

درخواست های Mysql

PHP برای کار با داده پایگاه داده تابع خاصی را ارائه نداده است. بنابراین باید از دستورات Mysql استفاده کرد. برای انجام عملیات های داده ای این کارها را باید انجام دهید:

1.      به پایگاه داده متصل شوید.

2.      با استفاده از تابع mysql_query() دستور Mysql را اجرا کنید. با استفاده از توابع mysql_fetch_array()، mysql_fetch_row() و mysql_num_rows نتیجه را پردازش کنید.

افزودن داده

برای افزودن داده به پایگاه داده از این دستور استفاده کنید:


INSERT INTO nama_table (field1,field2,...) VALUES ('data1','data2',...)

اگر پارامتر های فیلد مشخص نشود، تعداد داده های ورودی باید با تعداد ستون های جدول یکی باشد.

مثال

01

<?

02

//the example of inserting data

 

03

//data_insert.php

04

mysql_connect("localhost","root","admin");//database connection

 

05

mysql_select_db("employees");

06

$order = "INSERT INTO data_employees

 

07

            (name, address)

08

            VALUES

 

09

            ('H.R. Dian',

10

            'Jl. Raya Baru KOTABARU')";

 

11

//inserting data order

12

                         

 

13

//declare in the order variable

14

$result = mysql_query($order);

 

15

if($result){

16

    echo("<br>Input data is succeed");

 

17

}else{

18

    echo("<br>Input data is fail");

 

19

}

20

?>

تابع mysql_fetch_row()

تابع mysql_fetch_row() داده را از متغیر $result خط به خط می گیرد. اولین خروجی بالاترین خط است. داده ای که این تابع بر می گرداند به صورت آرایه است به طوری که عناصر آرایه همان فیلد های جدول داده هستند.

تابع mysql_fetch_array()

علاوه بر تابع mysql_fetch_row()، می توان از تابع mysql_fetch_array() هم استفاده کرد. همانند تابع mysql_fetch_row() این تابع هم یک خط داده را می خواند.

تفاوت دو تابع در این است که نتایج بازگشتی با mysql_fetch_array() به صورت آرایه associative است.

ویرایش داده

برای ویرایش داده از دستور زیر می توان استفاده کرد:

1

UPDATE name_table SET field1=new_value, field2=new_value, ...

2

WHERE condition1,condition2, ...

حذف داده

برای حذف داده از دستور زیر استفاده می شود:

DELETE FROM name_table WHERE condition1,condition2,...

اضافه کردن ستون به جدول

با دستور زیر می توان ستون هایی را به جدول اضافه کرد:

ALTER TABLE table_name ADD field_name field_type field_attribute

 

ویرایش ستون ها جدول

گاهی نیاز است مثلا ستون از نوع char  به varchar تبدیل شود و یا طول ستونی با اندازه 50 باید به 100 تغییر کند. برای این منظور از دستور زیر استفاده می شود:

ALTER TABLE table_name MODIFY field_name field_type field_attribute

مثال: نوع داده ستون position را تغییر می دهیم:

01

<?

02

//the example of changing MySQL database field table

 

03

//change_field.php

04

 

 

05

//database connection

06

mysql_connect("localhost","root","admin");

 

07

mysql_select_db("employees");

08

 

 

09

$order1 = "ALTER TABLE data_employees MODIFY position char(50)";

10

$add_field = mysql_db_query("employees", $order1);

 

11

if ($add_field){

12

    echo ("<br><br>Field position succeeds in adding");

 

13

}else{

14

    echo ("<br><br>Field position fails in adding");

 

15

}

16

?>

حذف ستون از جدول

برای حذف ستون از جدول:

ALTER TABLE table_name MODIFY field_name field_type field_attribute

برای مثال ستون position را حذف می کنیم:

01

<?

02

//the example of deleting MySQL database field table

 

03

//delete_field.php

04

mysql_connect("localhost","root","admin");//database connection

 

05

mysql_select_db("employees");

06

$order1 = "ALTER TABLE data_employees DROP position";

 

07

$add_field = mysql_db_query("employees", $order1);

08

if ($add_field){

 

09

    echo ("<br><br>Field position succeeds in deleting");

10

}else{

 

11

    echo ("<br><br>Field position fails in deleting");

12

}

 

13

?>

 

 

 

 

تگ ها:

دسته بندی ها: مقالات PHP | مقالات MySQL

خودآموز گام به گام PHP Data Object (PDO)

ارسال شده توسط administrator
17. جانفييه 2012 22:18

 

PHP Data Object یک کتابخانه Database Connection Abstraction برای PHP 5 است.

PDO چیست؟

·         Extension ی برای PHP 5 که با زیان C/C++ نوشته شده است.

·         Lightweigh Connection Abstraction Library  

جرا PDO؟

·         پایگاه های داده پشتیبانی شده توسط PHP را پشتیبانی می کند.

·         لازم نیست برای هر پایگاه داده کدی جدا بنویسید. یکبار بنوبسید همه جا استفاده کنید.

·         سرعت بالاتری دارد. PHP با زبان های کامپایل شده نوشته شده، برخلاف کتابخانه های PHP (مانند ADOdb) که با زیان های تفسیری نوشته شده است.

 

چه موقع از PDO استفاده کنیم؟

·         هنگامی که به برنامه ای پرتابل نیاز دارید که از بیشتر پایگاه های داده پشتیبانی می کند.

·         سرعت بالاتر می خواهید.

PDO یک Extension برای PHP 5 است که یک کتابخانه DBMS connection abstraction (data access abstraction library هم گفته می شود) را تعریف می کند. ADOdb برای PHP 4 نوشته شده است. PDO توابعی مانند ADOdb دارد با قابلیت های بسیار.

کتابخانه data access abstraction چیست؟ همانطور که می دانید، PHP از بیشتر پایگاه های داده اصلی مانند MySQL، MSSQL و غیره پشتیبانی می کند. کد اتصال به هرکدام از این پایگاه های داده مخصوص و متفاوت است. مثلا برای اتصال به پایگاه داده MySQL از کد زیر استفاده می کنیم:

1

mysql_connect($host, $user, $password);

اگر بخواهیم به SQLite متصل شویم:

1

sqlite_open($db, 066);

برای Postgresql:

1

pg_connect("host=$host dbname=$db user=$user password=$password");

ما برنامه ای مثلا بر اساس mysql نوشته ایم. هنگامی که لازم می شود مشتری به پایگاه داده SQLite مهاجرت کند، تمام برنامه را باید rebuild کنیم. اگر کدمان یک میلیون خطی باشد چه؟

لایه Data access Abstraction این تفاوت ها را حل می کند. ما فقط یکبار کدمان را می نویسیم و همه جا استفاده می کنیم (مانند جاوا).

 فعالسازی PHP Data Objects Extension

ابتدا این Extension را فعال می کنیم. مراحل فعال سازی و یا برسی وجود این Extension  به این شکل است:

برای استفاده از PDO، برسی کنید که ایا PDO extension وجود دارد یا نه؟ پوشه extension مربوط به PHP تان را باز کنید. برای مثال دایرکتوری app/php5/ext است.

clip_image001

سپس، فایل php.ini را باز کنید. معمولا در پوشه c:\windows است. خط های زیر را از حالت کامنت خارج کنید (; اول خط را بردارید):

extension = php_pdo.dll

extension=php_pdo_mysql.dll

اگر وجود ندارند انها را بسازید.

clip_image002

سرور آپاچی را ری استارت کنید. از داخل سرویس ها می توانید این کار را انجام دهید. اگر از ویندوز XP استفاده می کنید، از طریق زیر می توانید به ان دسترسی داشته باشید:

start > control panel > Performance and Maintenance > Administrative Tools > Services

apache را پیدا و انرا restart کنید.

clip_image003

اتصال با استفاده از PHP Data Objects

حالا به یک پایگاه داده متصل می شویم. از سرور mysql استفاده می کنیم. اول، یک پایگاه داده به نام test بسازید و جدولی به نام books:

1

CREATE TABLE `books` (

2

  `id` int(11) NOT NULL auto_increment,

 

3

  `title` varchar(150) NOT NULL,

4

  `author` varchar(150) NOT NULL,

 

5

  `description` varchar(255) NOT NULL,

6

  `on_sale` tinyint(1) NOT NULL,

 

7

  PRIMARY KEY  (`id`)

8

);

داده های نمونه را وارد کنید:

1

INSERT INTO `books` (`id`, `title`, `author`, `description`, `on_sale`) VALUES (1, 'PHP AJAX', 'Andreas', 'This is good book for learning AJAX', 1);

2

INSERT INTO `books` (`id`, `title`, `author`, `description`, `on_sale`) VALUES (2, 'PHP Eclipse ', 'George', 'Nice book', 0);

 

3

INSERT INTO `books` (`id`, `title`, `author`, `description`, `on_sale`) VALUES (3, 'PHP Prado', 'Junyian', '-', 1);

4

INSERT INTO `books` (`id`, `title`, `author`, `description`, `on_sale`) VALUES (4, 'PHP Zend Framework', 'Ozulian', 'great', 0);

 

5

INSERT INTO `books` (`id`, `title`, `author`, `description`, `on_sale`) VALUES (5, 'PHP Web Services', 'Bobi', '', 0);

6

INSERT INTO `books` (`id`, `title`, `author`, `description`, `on_sale`) VALUES (6, 'PHP API', 'Hugo', '', 1);

 

7

INSERT INTO `books` (`id`, `title`, `author`, `description`, `on_sale`) VALUES (7, 'PHP SEO', 'Monteo', '', 1);

 

حالا با کد زیر به این پایگاه داده متصل می شویم:

01

<?php

02

$host   = "localhost";

 

03

$db = "test";

04

$user   = "root";

 

05

$pass   = "admin";

06

 

 

07

$conn = new PDO("mysql:host=$host;dbname=$db",$user,$pass);

08

 

 

09

$sql = "SELECT * FROM books";

10

$q   = $conn->query($sql) or die("failed!");

 

11

while($r = $q->fetch(PDO::FETCH_ASSOC)){

12

  echo $r['title'];

 

13

}

14

 

 

15

 

16

?>

اتصال پرتابل به پایگاه داده

برای اتصال به پایگاه داده یک خط کد می نویسیم. هنگام عوض کردن پایگاه داده، فقط یک خط کد را بازنویسی می کنیم. در زیر کد PDO برای اتصال به چند پایگاه داده امده است:

1

// for MySQL

2

$conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass);

 

3

 

4

// for SQLite

 

5

$conn = new PDO("sqlite:$db");

6

 

 

7

// for postgreSQL

8

$conn = new PDO("pgsql:host=$host dbname=$db", $user, $pass);

 

به کد زیر نگاه کنید:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

$dbpath     = "c:/test.db";

 

09

 

10

// switching

 

11

switch($dbtype){

12

  case "mysql":

 

13

    $dbconn = "mysql:host=$dbhost;dbname=$dbname";

14

    break;

 

15

   

16

  case "sqlite":

 

17

    $dbconn = "sqlite:$dbpath";

18

    break;

 

19

   

20

  case "postgresql":

 

21

    $dbconn = "pgsql:host=$host dbname=$db";

22

    break;

 

23

}

24

 

 

25

// database connection

26

$conn = new PDO($dbconn,$user,$pass);

 

27

 

28

?>

این روش راحت تر و پرتابل تر است. برای تغییر پایگاه داده فقط یک خط (خط 3) را تغییر می دهیم.

حالات Fetch

در این قسمت، حالات مختلف آوردن داده را می بینیم. در MySQL، می دانیم توابع زیر وجود دارد:

mysql_fetch_row()

 mysql_fetch_array()

 mysql_fetch_assoc()

در PDO چطور؟

کد زیر به صورت عمومی بدون تعیین حالت اوردن داده کار می کند:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

 

11

 

12

// query

 

13

$sql = "SELECT title FROM books ORDER BY title";

14

$q   = $conn->query($sql);

 

15

 

16

// fetch

 

17

while($r = $q->fetch()){

18

  print_r($r);

 

19

}

20

 

 

21

// result

22

//Array ( [title] => PHP AJAX [0] => PHP AJAX )

 

23

//Array ( [title] => PHP API [0] => PHP API )

24

//Array ( [title] => PHP Eclipse [0] => PHP Eclipse )

 

25

//Array ( [title] => PHP Prado [0] => PHP Prado )

26

//Array ( [title] => PHP SEO [0] => PHP SEO )

 

27

//Array ( [title] => PHP Web Services [0] => PHP Web Services )

28

//Array ( [title] => PHP Zend Framework [0] => PHP Zend Framework )

 

29

?>

Fetch Association

01

// query

02

$sql = "SELECT title FROM books ORDER BY title";

 

03

$q   = $conn->query($sql);

04

$q->setFetchMode(PDO::FETCH_ASSOC);

 

05

 

06

// fetch

 

07

while($r = $q->fetch()){

08

  print_r($r);

 

09

}

10

 

 

11

// result

12

//Array ( [title] => PHP AJAX)

 

13

//Array ( [title] => PHP API)

14

//Array ( [title] => PHP Eclipse)

 

15

//Array ( [title] => PHP Prado)

16

//Array ( [title] => PHP SEO)

 

17

//Array ( [title] => PHP Web Services)

18

//Array ( [title] => PHP Zend Framework)

Fetch Num  (مانند mysql_fetch_row() در MySQL)

01

$q->setFetchMode(PDO::FETCH_NUM);

02

 

 

03

// fetch

04

while($r = $q->fetch()){

 

05

  print_r($r);

06

}

 

07

 

08

// result

 

09

//Array ( [0] => PHP AJAX )

10

//Array ( [0] => PHP API )

 

11

//Array ( [0] => PHP Eclipse )

12

//Array ( [0] => PHP Prado )

 

13

//Array ( [0] => PHP SEO )

14

//Array ( [0] => PHP Web Services )

 

15

//Array ( [0] => PHP Zend Framework )

Fetch Both  (پیش فرض)

01

$q->setFetchMode(PDO::FETCH_BOTH);

02

$q   = $conn->query($sql);

 

03

 

04

// fetch

 

05

while($r = $q->fetch()){

06

  print_r($r);

 

07

}

08

 

 

09

// result

10

//Array ( [title] => PHP AJAX [0] => PHP AJAX )

 

11

//Array ( [title] => PHP API [0] => PHP API )

12

//Array ( [title] => PHP Eclipse [0] => PHP Eclipse )

 

13

//Array ( [title] => PHP Prado [0] => PHP Prado )

14

//Array ( [title] => PHP SEO [0] => PHP SEO )

 

15

//Array ( [title] => PHP Web Services [0] => PHP Web Services )

16

//Array ( [title] => PHP Zend Framework [0] => PHP Zend Framework )

 

17

?>

پردازش خطا(Error Handling)

هنگام باز کردن اتصال به پایگاه داده، انتخاب پایگاه داده و اجرای پرس و جوها باید خطا ها را چک کنیم.

در PDO اینگونه خطا ها را پردازش می کنیم:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

try{

10

  // database connection

 

11

  $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

12

}

 

13

catch(PDOException $pe)

14

{

 

15

  die('Connection error, because: ' .$pe->getMessage());

16

}

 

17

 

18

 

 

19

// query

20

$sql = "SELECT title FROM books ORDER BY title";

 

21

$q   = $conn->query($sql);

22

 

 

23

if(!$q)

24

{

 

25

  die("Execute query error, because: ". $conn->errorInfo());

26

}

 

27

 

28

$q->setFetchMode(PDO::FETCH_BOTH);

 

29

 

30

// fetch

 

31

while($r = $q->fetch()){

32

  print_r($r);

 

33

}

34

 

 

35

 

36

?>

دستورهای آماده(Prepared Statements)

اگر با ویژوال استودیو کار کرده باشید، احتمالا از دستورات اماده استفاده کرده اید. PHP Extension برای MySQL و SQLite این قابلیت را ندارد. از مثال زیر مفهوم دستورات آماده را خواهید فهمید:

 

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

 

11

 

12

$title = 'PHP AJAX';

 

13

 

14

// query

 

15

$sql = "SELECT * FROM books WHERE title = ?";

16

$q = $conn->prepare($sql);

 

17

$q->execute(array($title));

18

 

 

19

 

20

$q->setFetchMode(PDO::FETCH_BOTH);

 

21

 

22

// fetch

 

23

while($r = $q->fetch()){

24

  print_r($r);

 

25

}

26

 

 

27

 

28

?>

در این مثال، پرس و جو به یک متغیر (که با علامت ? مشخص کرده ایم) بستگی دارد.

1

$sql = "SELECT * FROM books WHERE title = ?";

حالا، این پرس و جو را دستکاری می کنیم تا یک دستور آماده ساخته و اجرا کنیم:

1

$q = $conn->prepare($sql);

2

$q->execute(array($title))

مثالی دیگر:

1

$title = 'PHP%';

2

$author = 'Bobi%';

 

3

// query

4

$sql = "SELECT * FROM books WHERE title like ? AND author like ? ";

 

5

$q = $conn->prepare($sql);

6

$q->execute(array($title,$author));

Placeholder های اسمی  و موقعیتی (Positional and Named Placeholder)

Placeholder های موقعیتی

این پرس و جو را ببینید:

1

$title = 'PHP%';

2

$author = 'Bobi%';

 

3

// query

4

$sql = "SELECT * FROM books WHERE title like ? AND author like ? ";

 

5

$q = $conn->prepare($sql);

6

$q->execute(array($title,$author));

پرس و جوی بالا برای مشخص کردن محل مقادیر دستور آماده را با علامت ? مشخص کرده است. این علامت سوال ها placeholder موقعیتی نامیده می شوند. هنگام ارسال پارامتر ها به تابع execut() باید مواظب ترتیب انها در آرایه ارسالی باشیم.

Placeholder های اسمی

این مثال را ببینید:

1

$title = 'PHP%';

2

$author = 'Bobi%';

 

3

// query

4

$sql = "SELECT * FROM books WHERE title like :title AND author like :author ";

 

5

$q = $conn->prepare($sql);

6

$q->execute(array(':author'=>$author,

 

7

                  ':title'=>$title));

در اینجا به جای علامت سوال از دونقطه بعلاوه یک اسم استفاده کرده ایم. در اینجا موقعیت پارامتر های ارسالی مهم نیست. برای همین به ان Placeholder اسمی می گویند.

دستور Insert و Delete با استفاده از دستورهای اماده (Prepared statements)

در اینجا برای افزودن و حذف داده از دستورات اماده استفاده می کنیم.

مثال:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

 

11

 

12

// new data

 

13

$title = 'PHP Security';

14

$author = 'Jack Hijack';

 

15

 

16

// query

 

17

$sql = "INSERT INTO books (title,author) VALUES (:title,:author)";

18

$q = $conn->prepare($sql);

 

19

$q->execute(array(':author'=>$author,

20

                  ':title'=>$title));

 

21

 

22

 

 

23

?>

مثال برای آپدیت کردن داده:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

 

11

 

12

// new data

 

13

$title = 'PHP Pattern';

14

$author = 'Imanda';

 

15

$id = 3;

16

// query

 

17

$sql = "UPDATE books

18

        SET title=?, author=?

 

19

        WHERE id=?";

20

$q = $conn->prepare($sql);

 

21

$q->execute(array($title,$author,$id));

22

 

 

23

 

24

?>

 

دستورهای آماده و مقادیر Bound (بسته شده)

 هر جا که بتوانید یک مقدار یا متغیر را به یک placeholder اسمی یا موقعیتی Bind کنید، PDO از دستورات bound هم پشتیبانی می کند. مثال زیر را ببینید:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

 

11

 

12

// new data

 

13

 

14

// query

 

15

$sql = "SELECT * FROM books";

16

$q = $conn->prepare($sql);

 

17

$q->execute();

18

 

 

19

$q->bindColumn(1, $id);

20

$q->bindColumn(2, $title);

 

21

$q->bindColumn(3, $author);

22

 

 

23

while($q->fetch())

24

{

 

25

echo "$title, $author <br/>";

26

}

 

27

 

28

?>

برای Insert کردن داده:

1

// query

2

$sql = "INSERT INTO books (title,author) values(?,?)";

 

3

 

4

$q = $conn->prepare($sql);

 

5

$q->bindColumn(1, $title);

6

$q->bindColumn(2, $title);

 

7

 

8

$q->execute();

کار با BLOB ها

می توانیم عکس ها یا دیگر اسناد را در پایگاه داده ذخیره کنیم. برای این منظور، با نوع داده BLOB کار می کنیم.

اول، جدولی به نام books، می سازیم که دارای یک BLOB است.

1

CREATE TABLE `books` (

2

  `id` int(11) NOT NULL auto_increment,

 

3

  `title` varchar(150) NOT NULL,

4

  `author` varchar(150) NOT NULL,

 

5

  `description` varchar(255) NOT NULL,

6

  `on_sale` tinyint(1) NOT NULL,

 

7

  `cover` blob NOT NULL,

8

  PRIMARY KEY  (`id`)

 

9

);

نمونه داده جدول را اضافه می کنیم:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

 

11

 

12

// new data

 

13

$title = "ZEND FRAMEWORK TUTORIAL";

14

$author = "PHP Everyday";

 

15

$cover = fopen('7.png','rb');

16

// query

 

17

$sql = "INSERT INTO books (title,author,cover) values(?,?,?)";

18

 

 

19

$q = $conn->prepare($sql);

20

$q->bindParam(1, $title);

 

21

$q->bindParam(2, $author);

22

$q->bindParam(3, $cover, PDO::PARAM_LOB);

 

23

 

24

$q->execute();

 

25

 

26

?>

حالا داده را بازیابی می کنیم:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

 

11

 

12

// query

 

13

$sql = "SELECT id,title,author,cover FROM books";

14

$q = $conn->prepare($sql);

 

15

$q->execute();

16

 

 

17

$q->bindColumn(1, $id);

18

$q->bindColumn(2, $title);

 

19

$q->bindColumn(3, $author);

20

$q->bindColumn(4, $cover, PDO::PARAM_LOB);

 

21

 

22

while($q->fetch())

 

23

{

24

file_put_contents($id.".png",$cover);

 

25

echo "$title, $author, <img src='".$id.".png'> <br/>";

26

}

 

27

 

28

?>

تعیین پارامترهای Connection

در PDO ویژگی وجود دارد که انرا connection attribute می نامیم. این قابلیت پیشرفته را می توان برای تغییر نام ستون ها، تبدیل case (بزرگی کوچکی حرف ها)، و غیره استفاده کرد. مثال زیر را ببینید:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

 

11

 

12

// query

 

13

$conn->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);

14

$sql = "SELECT * FROM books";

 

15

$q = $conn->prepare($sql);

16

$q->execute();

 

17

 

18

$r = $q->fetch(PDO::FETCH_ASSOC);

 

19

 

20

print_r($r);

 

21

 

22

//result:

 

23

//Array ( [ID] => 1

24

//        [TITLE] => PHP AJAX

 

25

//        [AUTHOR] => Andreas

26

//        [DESCRIPTION] => This is good book for learning AJAX

 

27

//        [ON_SALE] => 1

28

//        [COVER] => )

 

29

?>

حالا خط 13 را ببینید:

1

$conn->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);

از ویژگی PDO::ATTR_CASE استفاده کرده ایم. این ویژگی case نام ستون هایی که با دستور PDOStatement::fetch() برگردانده می شود را کنترل می کند. این روش فقط زمانی کار می کند که حالت اوردن داده (Fetch mode) برابر PDO::FETCH_ASSOC  یا  PDO::FETCH_BOTH باشد. از کد بالا این  داده ها را دریافت می کنیم:

1

Array ( [ID] => 1

2

        [TITLE] => PHP AJAX

 

3

        [AUTHOR] => Andreas

4

        [DESCRIPTION] => This is good book for learning AJAX

 

5

        [ON_SALE] => 1

6

        [COVER] => )

دیگر مقادیر این ویژگی PDO::CASE_LOWER  و  PDO::CASE_NATURAL است.

 

ویژگی حالت خطا(Error Mode Attributes)

درباره PDO::ERRMODE صحبت خواهیم کرد. این ویژگی حالت گزارش خطا را کنترل می کند. سه مقدار می تواند داشته باشد:

PDO::ERRMODE_SILENT

 PDO::ERRMODE_WARNING

 PDO:ERRMODE_EXCEPTION

 

PDO::ERRMODE_SILENT

هنگامی که خطایی رخ می دهد، کد خطا را می توان با PDO::errorCode() یا PDO::errorInfo()  بدست آورد. این مقدار پیش فرض برای PDO::ERRMODE است.

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

 

11

 

12

// query

 

13

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);

14

$sql = "SELECT * FROM booksa";

 

15

$q = $conn->query($sql) or die("ERROR: " . implode(":", $conn->errorInfo()));

16

 

 

17

$r = $q->fetch(PDO::FETCH_ASSOC);

18

 

 

19

print_r($r);

20

 

 

21

//result:

22

//ERROR: 42S02:1146:Table 'test.booksa' doesn't exist

 

23

?>

PDO::ERRMODE_WARNING

هیچ کاری انجام نمی شود ولی خطایی با درجه E_Warning صادر می شود.

01

// query

02

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

 

03

$sql = "SELECT * FROM booksa";

04

$q = $conn->query($sql) or die("ERROR: " . implode(":", $conn->errorInfo()));

 

05

 

06

$r = $q->fetch(PDO::FETCH_ASSOC);

 

07

 

08

print_r($r);

 

09

 

10

//result:

 

11

//Warning: PDO::query() [function.PDO-query]: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.booksa' doesn't exist in

12

//C:\AppServ5\www\test\pdo\test.php on line 15

 

13

//ERROR: 42S02:1146:Table 'test.booksa' doesn't exist

 

PDO::ERRMODE_EXCEPTION

کد های خطا را قرار می دهد (مانند PDO::ERRMODE_SILENT) و یک exception از کلاس PDOException صادر می شود.

01

// query

02

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 

03

$sql = "SELECT * FROM booksa";

04

$q = $conn->query($sql) or die("ERROR: " . implode(":", $conn->errorInfo()));

 

05

 

06

$r = $q->fetch(PDO::FETCH_ASSOC);

 

07

 

08

print_r($r);

 

09

 

10

//result:

 

11

//Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.booksa' doesn't exist' in

12

//C:\AppServ5\www\test\pdo\test.php:15 Stack trace: #0 C:\AppServ5\www\test\pdo\test.php(15): PDO->query('SELECT * FROM b...') #1 {main} thrown in

 

13

//C:\AppServ5\www\test\pdo\test.php on line 15

 

بهبود کارایی با اتصالات مانا (persistent connection)

از اتصال های مانا می توان برای بالابردن کارایی استفاده کرد. هنگامی که یک اتصال مانا درخواست می شود، PHP برسی می کند که ایا اتصالی "همانند"  و باز از قبل وجود دارد یا نه. اگر وجود داشته باشد، از ان استفاده می شود. اتصال باز (مانا) به چه معناست؟ اتصال مانا لینکی است که بعد از اتمام اجرای اسکریپت بسته نمی شوند. اتصال های "همانند"، اتصالهایی هستند که ،با استفاده از یک نام کاربری و پسورد، به یک هاست (Host) باز شده اند.

در  PDO چگونه از اتصال مانا استفاده کنیم؟ PDO دارای ویژگی PDO::ATTR_PERSISTENT است. انرا در سازنده PDO اعمال می کنیم:

 

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass, array(PDO::ATTR_PERSISTENT => true));

 

11

 

12

// query

 

13

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

14

$sql = "SELECT * FROM books";

 

15

$q = $conn->query($sql) or die("ERROR: " . implode(":", $conn->errorInfo()));

16

 

 

17

$r = $q->fetch(PDO::FETCH_ASSOC);

18

 

 

19

print_r($r);

20

 

 

21

?>

خط 10 را ببینید.

دسترسی به ویژگی های Connection

با استفاده از متد getAttribute() می توانیم به ویژگی های اتصال دسترسی پیدا کنیم. مثال زیر را ببینید:

PDO:ATTR_DRIVER_NAME: نام درایور پایگاه داده را بر می گرداند.

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass, array(PDO::ATTR_PERSISTENT => true));

 

11

 

12

echo $conn->getAttribute(PDO::ATTR_DRIVER_NAME);

 

13

// result: mysql

14

?>

مثال 2:

01

<?php

02

// configuration

 

03

$dbtype     = "sqlite";

04

$dbhost     = "localhost";

 

05

$dbname     = "test";

06

$dbuser     = "root";

 

07

$dbpass     = "admin";

08

 

 

09

// database connection

10

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass, array(PDO::ATTR_PERSISTENT => true));

 

11

 

12

echo $conn->getAttribute(PDO::ATTR_DRIVER_NAME);

 

13

echo "<br>";

14

echo $conn->getAttribute(PDO::ATTR_CLIENT_VERSION);

 

15

echo "<br>";

16

echo $conn->getAttribute(PDO::ATTR_SERVER_VERSION);

 

17

 

18

?>

 

 

تگ ها:

دسته بندی ها: مقالات PHP

خودآموز گام به گام PHP ADOdb

ارسال شده توسط administrator
17. جانفييه 2012 20:47

 

PHP ADOdb چیست؟

·         کتابخانه ای برای دسترسی به انواع از پایگاه داده.

·          PHP ADOdb با PHP نوشته شده است.

·          از سیستم متاتایپ (metatype system) برای یافتن نوع داده(data type)  معادل یک فیلد در پایگاه داده استفاده می کند.

·         ایده ان از Microsoft ADOdb گرفته شده است.

چرا PHP ADOdb؟

·         از انواع پایگاه داده مانند MySQL، Oracle، Microsoft SQL Server، Sybase، Sybase SQL Anywhere، Informix، PostgreSQL، FrontBase، Interbase ، Foxpro، Access، ADO و ODBC پشتیبانی می کند.

·         همچنین این کتابخانه نه تنها از دستورات select و Delete که از Insert  نیز پشتیبانی می کند.

·         PHP ADOdb از نوع Write once run anywhere است. (یکبار بنویسید همه جا استفاده کنید).

·         کد sql ان انتقال پذیر(portable)  است .

 

مقدمه ای برای ADOdb

می توانید مشتریتان را با گفتن "مشکلی نیست می توانید از mysql، mssql، oracle و غیره استفاده کنید"، شگفت زده کنید. برنامه ما بدون نیاز به تغییر کد، تمام پایگاه های داده اصلی را پشتیبانی می کند. حتما ارتقاء می گیرید. ابزار جادویی ما php ADOdb است. توابع PHP برای دسترسی به پایگاه داده استاندارد نشده است. این نیاز به یک Class Library پایگاه داده را برای پنهان کردن اختلافات بین API پایگاه داده، بیشتر می کند، با این Class Library می توانیم به راحتی پایگاه داده را تعویض کنیم. در حال حاضر ADOdb از MySQL، Oracle، Microsoft SQL Server، Sybase، Sybase SQL Anywhere، Informix، PostgreSQL، FrontBase، Interbase، Foxpro، Access، ADO and ODBC پشتیبانی می کند. گزارش هایی مبنی بر اتصال موفق به Progress و DB2 هم از طریق ODBC داشته ایم. ویژگی های یکتای ADOdb عبارتند از:

·         برای کاربران ویندوز کار با ان راحت است. چون بسیاری از قرارداد ها شبیه Microsoft ADO است. بر خلاف دیگر کلاس های پایگاه داده PHP که بر دستور Select تمرکز دارند، ما کدی را ارائه می کنیم که insert و delete را هم انجام داده و قابل انتقال به دیگر پایگاه های داده باشد. برای هر پایگاه داده، متدهایی برای پردازش تاریخ (date)، الحاق رشته ها ارائه شده است.

·         یک سیستم متاتایپ به طور توکار نوشته شده که می توانیم معادل های نوع داده هایی مانند CHAR، STRING و TEXT را برای انواع پایگاه داده ها بیابیم.

·         انتقال ان راحت است، چون تمام کد وابسته به پایگاه داده در توابع stub نگهداری می شود. لازم نیست منطق هسته ی(Core logic)  کلاس ها را منتقل کنید.

·         پشتیبانی از PHP Session.

حالا این کتابخانه را تست می کنیم.

1.     از sourceforge انرا دانلود کنید.

2.     فایل فشرده شده را در یک دایرکتوری وب استخراج کنید.

3.     مدیر پایگاه داده را باز کنید (مثلا phpmyadmin).

4.     یک پایگاه داده بسازید (مثلا inventory)

5.     یک جدول ساده بسازید (مثلا products)

6.     حالا یک تست ساده. کد زیر رابنویسید. انرا درون دایرکتوری با پوشه adodb بگذارید نام انرا adodbtest.php بگذارید:

01

<?php    

02

    include('adodb/adodb.inc.php');

03

     

04

    $databasetype = 'mysql';

05

    $server = 'localhost';

06

    $user   = 'root';

07

    $password = 'r0ot';

08

    $database = 'inventory';

09

     

10

    $db = ADONewConnection($databasetype);

11

    $db->debug = true;

12

    $db->Connect($server، $user، $password، $database);

13

    $rs = $db->Execute('select * from products');

14

    print "<pre>";

15

    print_r($rs->GetRows());

16

    print "</pre>";

17

?>

   

7.     فایل را اجرا کنید

 

دستور Connection

در این بخش، درباره اتصال ها (connection) در php ADOdb صحبت خواهیم کرد. دو اتصال در ADOdb وجود دارد:Connect()  و Pconnect().

Connect($host,[$user],[$password],[$database])  - از این در مثال اولمان استفاده کردیم. اتصال ناماندگار (non-persistent) به پایگاه داده یا سرور به نام $host، با استفاده از نام کاربری $user و پسورد $password. اگر سرور از چند پایگاه داده پشتیبانی کند، به $database متصل می شویم.

کد مانند این است:

1

$db = ADONewConnection($databasetype);

2

$db->debug = true;

 

3

$db->Connect($server, $user, $password, $database);

اگر به جای OLEDB از Microsoft ADO استفاده می کنید می توانید، پارامتر $database را برابر ارائه دهنده داده OLEDB (OLEDB data provider) که استفاده می کنید قرار دهید.

PConnect($host,[$user],[$password],[$database])  - اتصال ماندگار (persistent) به پایگاه داده با استفاده از نام کاربری $user و پسورد $password. . اگر سرور از چند پایگاه داده پشتیبانی کند، به $database متصل می شویم.

1

include('adodb.inc.php'); # load code common to ADOdb

2

    $conn = &ADONewConnection('access'); # create a connection

 

3

    $conn->PConnect('northwind'); # connect to MS-Access, northwind DSN

 

اگر connect و pconnect را با هم اشتباه می کنید، نکات زیر ممکن است مفید باشد:

اول، هنگام اتصال، تابع سعی می کند، لینکی ماندگار و باز به همان هاست، نام کاربری و پسورد بیابد. اگر یافت شود، در عوض ساخت اتصال جدید، شناسه(id)  ان اتصال باز برگردانده می شود.

دوم، بعد از اتمام اسکریپت، اتصال به سرور SQL  بسته نمی شود. در عوض، لینک برای استفاده اینده باز گذاشته می شود (مثلا mysql_close() لینکهایی که با pconnect() باز شده را نمی بندد.)

 

دستور Select پیشرفته

ADOdb ویژگی هایی دارد که سرعت شما را افزایش می دهد. یکی از این ویژگی ها دستور پیشرفته select است. با استفاده از این می توانید کد های خود را بهبود دهید.

select ساده

مثال select ساده:

01

include('adodb.inc.php'); # load code common to ADOdb

02

   $conn = &ADONewConnection('access'); # create a connection

 

03

   $conn->PConnect('northwind'); # connect to MS-Access, northwind DSN

04

 

 

05

   $recordSet = &$conn->Execute('select * from products');

06

 

 

07

   if (!$recordSet)

08

       print $conn->ErrorMsg();

 

09

   else

10

       while (!$recordSet->EOF) {

 

11

           print $recordSet->fields[0].' '.$recordSet->fields[1].'<br>';

12

           $recordSet->MoveNext();

 

13

       }    $recordSet->Close(); # optional

14

   $conn->Close(); # optional

 

selectlimit

فرمول ان اینگونه است:

SelectLimit($sql,$numrows=-1,$offset=-1,$inputarr=false)

 

اگر موفق باشد یک Recordset را برمی گرداند.یک select ساده را اجرا می کند، با شبیه سازی دستور Select در PostgreSQL ، تعداد را به $numrows با شروع از $offset محدود می کند.

مثال:

01

$connection->SelectLimit('SELECT * FROM TABLE',-1,10)

 

نحوه نمایش جدول

نمایش تمام جدول ها با استفاده از ADOdb ساده است. فقط به MetaTables() نیاز دارید. مثال را ببینید:

1

<?php

2

    include('adodb/adodb.inc.php');

 

3

    $db = ADONewConnection('mysql');

4

    $db->debug = true;

 

5

    $db->Connect('localhost', 'root', 'admin', 'scanner');

6

    print_r($db->MetaTables());

 

7

?>

 

می توانید مقدار $db->MetaTables() را به یک آرایه تخصیص و با ان کار کنید.

 

نمایش فیلدها

حالا، کدی می نویسیم که تمام فیلدهای جدول و متا داده ان را نمایش می دهد. از MetaColumns() استفاده می کنیم:

01

<?php

02

    include('adodb/adodb.inc.php');

 

03

    $db = ADONewConnection('mysql');

04

    $db->debug = true;

 

05

    $db->Connect('localhost', 'root', 'admin', 'scanner');

06

    $arr = $db->MetaColumns('name_table');

 

07

    echo "<pre>";

08

    print_r($arr);

 

09

    echo "</pre>";

10

?>

 

نحوه نمایش پایگاه های داده

تمام پایگاه های داده اولین اتصال با استفاده از ADOdb را نمایش می دهیم:

01

<?php

02

    include('adodb/adodb.inc.php');

 

03

    $db = ADONewConnection('mysql');

04

    $db->debug = true;

 

05

    $db->Connect('localhost', 'root', 'admin', 'scanner');

06

    $arr = $db->MetaDatabases();

 

07

    echo "<pre>";

08

    print_r($arr);

 

09

    echo "</pre>";

10

?>

 

Cache کردن Recordset

یک ویژگی ظریف در ADOdb ، Cache کردن Recordset است. این کار باعث سریع شدن نتایج پرس و جو می شود.

از چندین متد می توان برای Cache کردن Recordset استفاده کرد:

CacheExecute()
CachePageExecute()
CacheSelectLimit()

CacheExecute()

مانند Execute است، فقط recordset برای $secs2cache ثانیه، در دایرکتوری $ADODB_CACHE_DIR، cache می شود. اگر CacheExecute() دوباره با همان پارامترها، همان پایگاه داده، همان نام کاربری و همان پسورد، فراخوانی شود و Recordset ، کش (cache) شده منقضی نشده باشد، همان recordset کش شده برگردانده می شود.

1

include('adodb.inc.php');

2

include('tohtml.inc.php');

 

3

$ADODB_CACHE_DIR = '/usr/local/ADOdbcache';

4

$conn = &ADONewConnection('mysql');

 

5

$conn->PConnect('localhost','userid','password','database');

6

$rs = $conn->CacheExecute(15, 'select * from table');

 

7

# cache 15 secs

 

CachePageExecute()

فرمول:

CachePageExecute($secs2cache, $sql, $nrows, $page, $inputarr=false)

 

برای صفحه بندی (pagination یا صفحه صفحه کردن) recordset استفاده می شود، صفحه ها از 1 شروع می شود نه صفر.

01

include_once('adodb.inc.php');

02

include_once('adodb-pager.inc.php');

 

03

session_start();

04

 

 

05

$db = NewADOConnection('mysql');

06

$db->Connect('localhost','root','','xphplens');

 

07

$sql = "select * from adoxyz ";

08

 

 

09

$pager = new ADODB_Pager($db,$sql);

10

$pager->Render($rows_per_page=5);

 

CacheSelectLimit()

فرمول:

CacheSelectLimit([$secs2cache,] $sql, $numrows=-1,$offset=-1,$inputarr=false)

مانند SelectLimit است، فقط recordset بازگشتی برای $secs2cache ثانیه، در دایرکتوری $ADODB_CACHE_DIR، cache می شود.

1

$conn->Connect(...);

2

   $conn->cacheSecs = 3600*24; // cache 24 hours

 

3

   $rs = $conn->CacheSelectLimit('select * from table',10);

 

بازدهی این 3 متد انقدر متفاوت است که باید درباره زمان مناسب برای کش کردن صحبت کنیم. هنگامی که سرور پایگاه داده شما خیلی از وب سرور شما کند تر است، و یا پایگاه داده ترافیک شدید دارد، کش کردن مناسب است چون بار روی پایگاه داده را کم می کند. اگر پایگاه داده شما بار چندانی ندارد و خیلی از وب سرورتان سریع تر است، کش کردن کارایی و بازدهی را کاهش می دهد.

 

 

 

 

تگ ها:

دسته بندی ها: مقالات PHP