public function __construct() { parent::__construct(); try { $this->con = new PDO('odbc:Driver={SQL Server};Server=dgk90tch006;Database=DevNet; Uid=sa;Pwd=Asu31281080', '', '', [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]); } catch (Exception $ex) { $msg = $ex->getMessage(); charsetChange($msg); throw new Exception($msg); } }
/** * @param $stmt PDOStatement * @return array */ private function prepareData(&$stmt) { $error = $stmt->errorInfo(); $ecode = get_param($error, 0); if ($ecode !== '00000') { $emsg = get_param($error, 2); charsetChange($emsg); $this->qerrors[] = "ACCESS error [{$ecode}]: " . ($emsg ? $emsg : 'Invalid params'); return false; } $data = $stmt->fetchAll(); array_walk_recursive($data, 'charsetChange'); return $data; }
protected function select($query, $param = array(), &$rowCount = null) { if (!self::isConnected()) { self::$errorlist[] = 'Связь с БД не установлена.'; return []; } /** * модернизируем запрос на лету * если есть параметры в виде массивов * такие параметры будем заменять на конструкцию in * * where field in :[ARRAY] => where field in (x1,x2,...) */ $cnt = 0; foreach ($param as $key => $value) { if (gettype($value) === 'array') { $condition = "("; $local = 0; foreach ($value as $item) { $condition .= $local ? "," : ""; // если не первый параметр, то добавим запятую $vparam = "_X" . ++$cnt; $condition .= " :{$vparam}"; // а параметр подмассива перекидываем в основной массив // елементы вложенного массива не должны быть сами массивами, иначе хрень будет $param[$vparam] = $item; $local++; } $condition .= ") "; $query = str_replace(":{$key}", $condition, $query); unset($param[$key]); } } //var_dump($query); $sth = self::$db->prepare($query); foreach ($param as $key => $value) { $type = strtolower(gettype($value)); $cast = null; switch ($type) { case 'integer': $cast = PDO::PARAM_INT; break; case 'null': $cast = PDO::PARAM_NULL; break; case 'boolean': $cast = PDO::PARAM_BOOL; break; default: $cast = PDO::PARAM_STR; break; } $sth->bindValue($key, $value, $cast); } $sth->execute(); $error = $sth->errorInfo(); $ecode = get_param($error, 0); if ($ecode !== '00000') { $emsg = get_param($error, 2); charsetChange($emsg); self::$errorlist[] = "MySQL error [{$ecode}]: " . ($emsg ? $emsg : 'Invalid params'); } $rowCount = $sth->rowCount(); return $sth->fetchAll(); }