PHP - קריאה מDB של MSSQL. מישהו התנסה?
-
אני צריך לגשת בPHP לDB של MSSQL.
הPHP נמצא על מכונת לינוקס, והMSSQL על מכונת ווינדוס סרבר (כיום אפשר להתקין MSSQL גם על לינוקס, אבל זה לא הנושא כעת)
אני מתלבט האם לגשת מהPHP ישירות לMSSQL (השיטה המועדפת עלי), או לעשות עוד שכבה בווינדוס סרבר שיחזיר לי JSON.מישהו התנסה?
וגם, בכללי, האם מישהו התנסה לגשת מPHP לMSSQL? כמה זה מורכב לעומת JSON?תודה
-
@clickone אמר בPHP - קריאה מDB של MSSQL. מישהו התנסה?:
@dovid זה לPHP7.
יש לי PHP5 על השרת. ואני דיי חושש לשדרג / להוסיף.אז תבדוק את זה
http://www.linuxjournal.com/article/6636
https://gist.github.com/joecampo/acd1e5881aee08bd8959 -
@clickone
בניתי מערכת טלפונית עבור מנהלת קבר יוסף, הוצרכתי לחבור לבסיס הנתונים שלהם MSSQL.
לאחר יגיעה וטירחה הסתדרתי ב"ה.
ראשית כל חייבים שהיה מותקן על השרת דרייברים של (MSSQL (sql_srv
כולל דרייבר PDO לSQL.
אני אישית משתמש הרבה עם מחלקת תקשורת לMYSQL שמקורה https://gist.github.com/danferth/9512172
אך ביצעתי שינויים במבנה ההתחברות לספק גמישות בהתחברות דינאמית לבסיס נתונים משתנה ולא קבוע במחלקה.
בנוסף הוספתי תמיכה בmssql.
להלן המחלקהclass db{ private $dbh; private $error; private $qError; private $stmt; public function __construct($user, $pass, $dbName = null, $host = "localhost", $srv = "mysql"){ $this->host = $host; $this->user = $user; $this->pass = $pass; if ($dbName == null) $this->dbName = $user; else $this->dbName = $dbName; //dsn for mysql //if ($srv == "mysql") if ($srv == "mysql"){ $dsn = "mysql:host=".$this->host.";dbname=".$this->dbName; $options = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ); } elseif ($srv == "mssql"){ $dsn = "sqlsrv:server=".$this->host.";Database=".$this->dbName; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ); } try{ $this->dbh = new PDO($dsn, $this->user, $this->pass, $options); } //catch any errors catch (PDOException $e){ $this->error = $e->getMessage(); } } public function query($query){ $this->stmt = $this->dbh->prepare($query); } public function bind($param, $value, $type = null){ if(is_null($type)){ switch (true){ case is_int($value): $type = PDO::PARAM_INT; break; case is_bool($value): $type = PDO::PARAM_BOOL; break; case is_null($value): $type = PDO::PARAM_NULL; break; default: $type = PDO::PARAM_STR; } } $this->stmt->bindValue($param, $value, $type); } public function execute(){ return $this->stmt->execute(); $this->qError = $this->dbh->errorInfo(); if(!is_null($this->qError[2])){ echo $this->qError[2]; } echo 'done with query'; } public function resultset(){ $this->execute(); return $this->stmt->fetchAll(PDO::FETCH_ASSOC); } public function single(){ $this->execute(); return $this->stmt->fetch(PDO::FETCH_ASSOC); } public function rowCount(){ return $this->stmt->rowCount(); } public function lastInsertId(){ return $this->dbh->lastInsertId(); } public function beginTransaction(){ return $this->dbh->beginTransaction(); } public function endTransaction(){ return $this->dbh->commit(); } public function cancelTransaction(){ return $this->dbh->rollBack(); } public function debugDumpParams(){ return $this->stmt->debugDumpParams(); } public function queryError(){ $this->qError = $this->dbh->errorInfo(); if(!is_null($qError[2])){ echo $qError[2]; } } }//end class db
להלן דוגמה לשימוש
$database = new db("user", "pass", "moreshet.mdf", "mssql.lut.co.il", "mssql");
זה יוצר אינטרפייס של המחלקה ומאפשר שליפת הנתונים ועוד לפי ההוראות בקישור לעיל.
לדוגמה$database->query('SELECT * FROM [moreshet.mdf].[phone].[play]'); //$database->bind(":$key", $value); $result = $database->resultset();
ובקיצור זה ממש כמו mysql.
יש לי פונקציות נוספות שמקילות מאוד על כל התקשורת עם SQL.
תוכל ליצור קשר באישי.
7226644@gmail.com -
@clickone אמר בPHP - קריאה מDB של MSSQL. מישהו התנסה?:
@חוקר
תודה רבה
אני חושב שהתקני את המחלקות האלו ואפילו הצלחתי לתקשר עם השרת.
אבל לא תגובות משאילתות.
עוד מעט אבדוק שוב....יש תמיכה לקודים. התחלה לפני הקוד ב3 סימני תלתל רצופים וסיום
תלתל = ~אכן תיקנתי את ההצגה של הקודים.
לגבי קבלת הנתונים תוכל ליצור קשר באישי.אגב לפני שהסתדרתי כבר חשבתי לעשות הכל באמצעות ג'יסון, אבל אין סיבה.
זה עובד חלק