
07-01-2007, 21:48
|
|
|
|
חבר מתאריך: 17.05.04
הודעות: 1,454
|
|
קוד PHP:
function __construct($db, $user = 'root', $host = 'localhost', $pass = false, $dbType = 'mysql'){ if(!$pass) $this->key = @mysql_connect($host, $user) or $this->error(); else $this->key = @mysql_connect($host, $user, $pass) or $this->error(); if($this->key){ if (trim($db)) @mysql_select_db($db, $this->key) or $this->error(); else{ mysql_close($this->key); return false; } return $this->key; } else $this->error(); }
פונקציה די פשוטה, ההתחברות למסד נתונים.
יש שם פרמטר dbType כיוון שבעתיד אני כנראה אוסיף למחלקה הרחבות למסדי נתונים אחרים.
קוד PHP:
private function escapeArray($array){ if(get_magic_quotes_gpc()){ for($i = 0; $i < count($array); $i++){ $array[$i] = htmlspecialchars(mysql_real_escape_string(stripsla shes($array[$i])), ENT_NOQUOTES); } } else{ for($i = 0; $i <= count($array); $i++){ $array[$i] = htmlspecialchars(mysql_real_escape_string($array[$i]), ENT_NOQUOTES); } } return $array; }
פונקציה שמבריחה כל איבר במערך, כיוון שבפונקציה query (נדון עליה בהמשך), אני משיג את הארגומנטים (המשתנים שיוברחו) בסוג של מערך.
קוד PHP:
final public function query($query){ $this->numQuery ++; $args = array_slice(func_get_args(), 1); $this->queryResult = mysql_query(vsprintf($query, $this->escapeArray($args)), $this->key) or $this->error(); return $this->queryResult; }
פונקציה לשאילתה, מבריחה את התווים ומוסיפה 1 למספר השאילתות שהיו.
כמו שאפשר לראות, הוספתי את האפשרות להשתמש בprintf - כאשר אתה רוצה להבריח את הנתונים, תשתמש בשאילתה כסוג של printf - כאשר זה לא חשוב תרשום את המשתנה בגוף השאילתה ובכך תחסוך משאבים.
קוד PHP:
public function fetchResult($stat = 'array', $allExtract = false, $query = false){ $this->queryResult = ($query) ? $query : $this->queryResult; switch($stat){ case 'num': $this->queryFetch = @mysql_num_rows($this->queryResult) or $this->error(); break; case 'object': case 'array': case 'row': case 'lengths': $mysqlFetch = 'mysql_fetch_'.$stat; if(!$allExtract){ $this->queryFetch = $mysqlFetch($this->queryResult) or $this->error(); break; } while($i = $mysqlFetch($this->queryResult)) $this->queryFetch[] = $i; break; default: return false; } mysql_free_result($this->key); return $this->queryFetch; }
הפונקציה לשליפת הנתונים - ישנה אפשרות לשלוף את כל הנתונים בבת אחת, וישנן כמה דרכים לשלוף את הנתונים (object, array וכו').
ישנה גם הפונקציה mysql_free_result בסוף שבעצם מוחקת את הזכרון של השאילתה ובכך מקלה על השרת.
קוד PHP:
protected function error(){ die(mysql_error()); }
פונקציה פשוטה לשגיאות, כך אפשרי לשנות את זה לכך שאם יש שגיאה אז זה לא יציג את העמוד וישלח הודעה למנהל הראשי וכדו'.
קוד PHP:
function __destruct(){ unset($this->key, $this->numQuery, $this->queryResult, $this->queryFetch); }
פונקציה שמוחקת את המשתנים, נועדה אך ורק להקל על השרת.
יש להגיד כי המחלקה שונתה במקצת מהקוד הקודם, אז כדאי שתשתמש בזאתי אם אתה בוחר במחלקה הזו.
בכל מקרה - הנה דוגמא לשימוש :
קוד PHP:
$db = new db('myDB', 'user', 'localhost', 'pass'); $db->query("SELECT `user`, `pass` FROM `userData` WHERE `user` = '%s' AND `pass` = '%s'", $_POST['user'], $_POST['pass']); if(!$user = $db->fetchResult('object')->user) die('Restricted Area'); echo "Welcome ".$user.", How Are You?";
המחלקה הבריחה אוטומטית את המשתנים ['POST['pass_$ ו ['POST['user_$.
ולאחר מכן השתמשתי בפונקציה fetchResult כדי לשלוף את הנתונים כאוביקט ואימתתי בתנאי אם המשתמש רשום \ לא.
_____________________________________
EVERYTHING SHOULD BE MADE AS SIMPLE AS POSSIBLE, BUT NOT ONE BIT SIMPLER
ALBERT EINSTEIN
|