virt2/api/php/mysql7.php

379 lines
13 KiB
PHP
Raw Normal View History

<?php
class MySQL {
var $debug; //дебажим?
var $id; //возвращает или принимает id
var $num; //возвращает колличество
var $result; //возвращает результат
var $or_by_desc;
var $tmp;
var $connection;
function to_log($sql){
if ($this->debug=='1'){
require_once MYDIR . '/api/php/log.php';
$log1 = new save_log;
$log1->file_name = @MOD;
$log1->print_log($sql);
}
if ($this->debug=='2')echo $sql;
}
//Конструктор
public function __construct($bd=BD_NAME, $bd_type=BD_TYPE, $bd_host=BD_HOST, $bd_user=BD_USER, $bd_pwd=BD_PWD){//тип базы, если SQLITE3 то остальные параметры не важны
switch( $bd_type ) {
//Выбираем субд
case 'SQLITE3':
//echo "testtesttest";
$this -> conn = new PDO( 'sqlite:' . $_SERVER['DOCUMENT_ROOT'] . '/bd/'. $bd );
$sql = 'PRAGMA foreign_keys=on;';
$this -> conn -> query ( $sql );
break;
default: //по умолчанию MySQL
$this -> connection = new PDO('mysql:host=localhost;dbname=' . $bd . ';charset=utf8', $bd_user, $bd_pwd);
$this -> connection -> exec("set names utf8");
}
$this -> mod_set = $this -> get_settings_mod();
}
function replacer_param_xml ($text) { // ФУНКЦИЯ очистки кода для xml
$old1 = array("<", ">", "/");#Ищем вредное ">",, "<"
$new1 = array("", "", "");#Меняем на полезное"&gt;", , "&lt;"
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
$this -> tmp = $text;
}
function clean ($text) { // ФУНКЦИЯ очистки кода для xml
$old1 = array('"');#Ищем вредное ">",, "<"
$new1 = array('\"');#Меняем на полезное"&gt;", , "&lt;"
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
return $text;
}
function to_j($txt){
return json_encode($txt, JSON_UNESCAPED_UNICODE);
}
function from_j($txt){
return json_decode($txt, true);
}
function get_settings_mod( $mod=MOD ){//получаем настройки модуля из json
unset( $a );
$a['mod'] = $mod;
//проверяем существование записи
$id = $this -> get_val( 'settings', $a, 'id' );
if ( !$id ) $this -> add( 'settings', $a );
$json = $this -> get_val( 'settings', $a, 'json' );
return $this -> from_j( $json );
}
/* коннект к бд */
function connect($host,$login_mysql,$password_mysql,$baza_name) {
//echo $baza_name;
$this -> connection = new PDO('mysql:host=localhost;dbname=' . $baza_name . ';charset=utf8', $login_mysql, $password_mysql);
$this->connection->exec("set names utf8");
}
//Изменение базы
function change_db( $baza_name ) {
//echo $baza_name;
$this -> connection = new PDO('mysql:host=localhost;dbname=' . $baza_name . ';charset=utf8', 'admin', '32143214');//исправить!
$this->connection->exec("set names utf8");
}
function get_massiv($table, $where='', $order='', $limit='', $collums='*'){
$debug=$this->debug;
@$or_by_desc=$this->or_by_desc;
/*where - массив колонок и желаемых значений*/
$sql='SELECT ' . $collums . ' FROM `' . $table . '`';
if ($where){
$sql.=' WHERE ';
foreach ($where as $key => $value) @$str.=' `' . $key . '` = "' . $value . '" AND ';
/* отрезаем лишнее */
$len = strlen( $str )-4;
$sql .= substr( $str, 0, $len );
}
/* выясняем сортировку */
if ( $order ) $sql .= ' ORDER BY `' . $order . '` ';
if (@$or_by_desc==1)$sql.=' DESC ';
if ( $limit ) $sql .= ' LIMIT ' . $limit;
/* если указан дебаг, пишем в лог */
if ($debug)$this->to_log($sql);
/* наконец то запрашиваем */
$data = $this -> connection -> query($sql)->fetchAll(PDO::FETCH_ASSOC);
// print_r($data);
$this -> num = count($data);
$this -> result = $data;
return $data;
}
/* выборка по лайку */
function get_massiv_like($table, $where='', $order='', $limit='', $collums='*'){
$debug=$this->debug;
$or_by_decs=$this->or_by_decs;
/*where - массив колонок и желаемых значений*/
$sql='SELECT ' . $collums . ' FROM `' . $table . '`';
if ($where){
$sql.=' WHERE ';
foreach ($where as $key => $value) @$str.=' `' . $key . '` LIKE "%' . $value . '%" AND ';
/* отрезаем лишнее */
$len = strlen( $str )-4;
$sql .= substr( $str, 0, $len );
}
/* выясняем сортировку */
if ( $order ) $sql .= ' ORDER BY `' . $order . '` ';
if ($or_by_desc==1)$sql.=' DESC ';
if ( $limit ) $sql .= ' LIMIT ' . $limit;
/* если указан дебаг, пишем в лог */
if ($debug)$this->to_log($sql);
/* наконец то запрашиваем */
$result=mysql_query($sql);
$this -> num = mysql_numrows( $result );
while ( $postrow[] = mysql_fetch_array($result));/*Кидаем в переменную*/
$this -> result = $postrow;
unset($postrow);
}
function free_sql($sql){
if ($this -> debug)$this->to_log($sql);
/* наконец то запрашиваем */
$data = $this -> connection -> query($sql)->fetchAll(PDO::FETCH_ASSOC);
$this -> num = count($data);
$this -> result = $data;//когда нибудь убрать
return $data;
}
function free_sql2($sql){
if ($this -> debug)$this->to_log($sql);
/* наконец то запрашиваем */
$this -> connection -> query($sql);
}
/* простой запрос - одно значение, по одному запросу */
function get_val( $table, $where, $collum ){
$debug = $this -> debug;
foreach ( $where as $key => $value ) @$str.=' `' . $key . '` = "' . $value . '" AND ';
$len = strlen( $str )-4;
$str2 = substr( $str, 0, $len );
$sql = 'SELECT `' . $collum . '` FROM `' . $table . '` WHERE ' . $str2 . ' LIMIT 1';
/* если указан дебаг, пишем в лог */
if ( $debug ) $this -> to_log( $sql );
foreach( $this -> connection -> query( $sql ) as $row ) {}
$this -> result = $row[0];//когда нибудь убрать
return $this -> result;
}
/* Функция добавления контента */
function add($tab, $massiv) {
$debug=$this->debug;
foreach ($massiv as $key => $value) {
if ($key!='ok'){
@$tabs.='`' . $key . '`, ';
@$val.="'" . $value . "', ";
}
}
$tabs=substr($tabs, 0, strlen($tabs)-2);
$val=substr($val, 0, strlen($val)-2);
$sql='insert into `' . $tab . '` (' . $tabs . ') VALUES (' . $val . ')';
if ($debug)$this->to_log($sql);
$query = $this->connection->prepare($sql);
$query->execute();
$this -> id = $this->connection->lastInsertId();//когда нибудь убрать
return $this -> id;
}
/* функция обновления таблиц по ИД */
function update($tab, $id, $massiv) {
$debug=$this->debug;
foreach ($massiv as $key => $value) {
if ($key!='ok') @$res.="`" . $key . "` = '" . $this->clean($value) . "', ";
}
$res=substr($res, 0, strlen($res)-2);
$sql='UPDATE `' . $tab . '` SET ' . $res . ' WHERE `id` = "' . $id . '"';
//mysql_query($sql);
$query = $this->connection->prepare($sql);
$query->execute();
if ($debug)$this->to_log($sql);
}
/* функция обновления таблиц по ИД в формате XML */
function update_xml($tab, $id, $massiv, $base64=0) {
$debug=$this->debug;
if ($base64==1){
foreach ($massiv as $key => $value) {
if ($key!='ok') $res.='<' . $key . '>' . base64_encode( $value ) . '</' . $key . '>';
}
}else{
foreach ($massiv as $key => $value) {
if ($key!='ok') $res.='<' . $key . '>' . $this->clean($value) . '</' . $key . '>';
}
}
$sql='UPDATE `' . $tab . '` SET `xml` = "' . $res . '" WHERE `id` = "' . $id . '"';
//echo $sql;
//mysql_query($sql);
$query = $this->connection->prepare($sql);
$query->execute();
if ($debug)$this->to_log($sql);
}
/* Функция добавления контента */
function add_xml($tab, $massiv, $base64) {
$debug=$this->debug;
if ($base64==1){
foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . base64_encode($value) . '</' . $key . '>';}}
else{
foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . $value . '</' . $key . '>';}
}
$sql='insert into `' . $tab . '` (`xml`) VALUES ("' . $res . '")';
//mysql_query($sql);
if ($debug)$this->to_log($sql);
//$this -> id = mysql_insert_id();
$query = $this->connection->prepare($sql);
$query->execute();
$this -> id = $db->lastInsertId();
}
/* функция удаления по ИД */
function del_id ( $tab, $id ) {
$debug = $this -> debug;
$sql='DELETE FROM `' . $tab . '` WHERE `id` = "' . $id . '"';
//mysql_query( $sql );
$this -> connection -> query($sql);
// $query = $this->connection->prepare($sql);
// $query->execute();
if ( $debug ) $this -> to_log ( $sql );
}
/*счетчик записей*/
function count_sql($tab, $where) {
$debug=$this->debug;
/*where - массив колонок и желаемых значений*/
$sql='SELECT COUNT(*) FROM `' . $tab . '`';
if ($where){
$sql.=' WHERE ';
foreach ($where as $key => $value) @$str.=' `' . $key . '` = "' . $value . '" AND ';
/* отрезаем лишнее */
$len = strlen( $str )-4;
$sql .= substr( $str, 0, $len );
}
if ($debug)$this->to_log($sql);
/* наконец то запрашиваем */
$res=$this->connection->query($sql);
$this -> result = $res->fetchColumn();//когда нибудь убрать
return $this -> result;
//return $res->fetchColumn();
}
/* не в тему - но пусть письмо админу будет здесь*/
function send_to_admin($tema, $txt, $email) {
include_once MYDIR . '/api/php/sendmail.php';
send_mime_mail( $_SERVER['SERVER_NAME'],
'info@' . $_SERVER['SERVER_NAME'],
'Вы',
$email,
'UTF-8', // кодировка, в которой находятся передаваемые строки
'WINDOWS-1251', // кодировка, в которой будет отправлено письмо
$tema,
$txt);
}
/* функция получения настроек модуля */
function get_settings($mod){
unset($a);
$a['mod'] = $mod;
$xml = $this -> get_val( 'settings', $a, 'xml' );
require_once MYDIR . '/api/php/parsexml.php';
$parce = new parsexml;
$parce -> make_massiv ( $xml );
$arr = $parce -> res;
unset($tmp);
foreach ( $arr as $key => $value ) $tmp[$key] = $value;
return $tmp;
}
/*
Берем двухмерный массив данных
$db = new MySQL;
$db->connect('localhost','root','','b-install');
$st['id']=1; - какие колонки с каким значением нужны
$db -> debug = 2;// 1- пишет лог, 2 показывает на экране
$db -> get_massiv ( 'pages', $st, $order, $limit ); //исполняем функцию с параметрами
$massiv = $db->result; //получаем результат
*/
/* Функция вынимает xml профиля юзера */
function userxml($user_id){
unset($a);
$a['user_id']=$user_id;
$this->get_val('users_profiles', $a, 'xml');
return $this->result;
}
/* Интернет-магазин */
/* Берем нужные директории категорий */
function get_cat_im($id){
unset($tmp);
$tmp['id']=$id;
$tmp['public']=1;
$tmp['show_mnu']=1;
$this->get_massiv('m_groupe', $tmp, 'naim');
return $this->result;
}
/* Получаем итого заказа */
function zakaz_itog($zakaz_id){
unset($tmp);
$tmp['zakaz_id']=$zakaz_id;
$tovar = $this -> get_massiv('cart', $tmp);
$num = $this -> num;
for( $i = 0; $i < $num; $i++ ){
unset($a);
$a['id'] = $tovar[$i]['tovar_id'];
$cena = $this -> get_val( 'm_tovar', $a, 'akccena' );
if ( $cena < 1 ) $cena = $this -> get_val( 'm_tovar', $a, 'cena' );
$pod_itog[$i] = $cena * $tovar[$i]['col'];
unset($cena);
}
return array_sum($pod_itog);
}
/**/
}
?>