27 $this->connection?->disconnect();
37 return "CURRENT_DATE";
67 $format = str_replace($search, $replace, $format);
69 if (!str_contains($format,
'%H'))
71 $format = str_replace(
"H",
"%h", $format);
74 if (!str_contains($format,
'%M'))
76 $format = str_replace(
"M",
"%b", $format);
80 if (str_contains($format,
'T'))
84 $format = str_replace(
"T",
"%p", $format);
94 return "REPLACE(REPLACE(DATE_FORMAT(" . $field .
", '" . $format .
"'), 'PM', 'pm'), 'AM', 'am')";
97 return "DATE_FORMAT(" . $field .
", '" . $format .
"')";
103 if (CTimeZone::Enabled())
105 static $diff =
false;
108 $diff = CTimeZone::GetOffset();
113 $timeZone = $diff > 0 ?
"+" . $diff : $diff;
116 return "UNIX_TIMESTAMP(" . $fieldName .
")" . $timeZone;
121 return 'DATE(' . $strValue .
')';
133 if($s_date1 > $s_date2, 1,
134 if ($s_date1 < $s_date2, -1,
135 if ($s_date1 = $s_date2, 0, 'x')
143 public function PrepareFields($strTableName, $strPrefix =
"str_", $strSuffix =
"")
146 foreach ($arColumns as $arColumn)
148 $column = $arColumn[
"NAME"];
149 $type = $arColumn[
"TYPE"];
151 $var = $strPrefix . $column . $strSuffix;
156 $$var = intval($$column);
159 $$var = doubleval($$column);
162 $$var = $this->
ForSql($$column);
173 foreach ($arColumns as $strColumnName => $arColumnInfo)
175 $type = $arColumnInfo[
"TYPE"];
178 if ($strInsert1 !=
'')
186 $strInsert1 .=
"`" . $strColumnName .
"`";
188 if ($value ===
false)
190 $strInsert2 .=
"NULL";
200 $strInsert2 .=
"NULL";
210 $strInsert2 .=
"NULL";
218 $strInsert2 .=
"'" . intval($value) .
"'";
221 $value = doubleval($value);
222 if (!is_finite($value))
226 $strInsert2 .=
"'" . $value .
"'";
229 $strInsert2 .=
"'" . $this->
ForSql($value) .
"'";
235 if ($strInsert1 !=
'')
240 $strInsert1 .=
"`" . $strColumnName .
"`";
241 $strInsert2 .=
$arFields[
"~" . $strColumnName];
245 return [$strInsert1, $strInsert2];
257 if ($strTableAlias !=
"")
259 $strTableAlias .=
".";
263 foreach ($arColumns as $strColumnName => $arColumnInfo)
265 $type = $arColumnInfo[
"TYPE"];
268 if ($strUpdate !=
'')
275 if ($value ===
false)
277 $strUpdate .= $strTableAlias .
"`" . $strColumnName .
"` = NULL";
281 $strUpdate .= $strTableAlias .
"`" . $strColumnName .
"` = " . $value->compile();
288 $value = intval($value);
291 $value = doubleval($value);
292 if (!is_finite($value))
319 $value =
"'" . $this->
ForSql($value) .
"'";
321 $strUpdate .= $strTableAlias .
"`" . $strColumnName .
"` = " . $value;
326 if ($strUpdate !=
'')
330 $strUpdate .= $strTableAlias .
"`" . $strColumnName .
"` = " .
$arFields[
"~" . $strColumnName];
339 $tables = $strTableName;
340 foreach ($from as $join)
342 $tables .=
"\n INNER JOIN " . $join[0] .
' ON ' . $join[1];
345 foreach (
$arFields as $fieldName => $fieldValue)
347 $fields .= (
$fields ?
",\n " :
"") . $strTableName .
'.' . $fieldName .
'=' . $fieldValue;
349 $update =
'UPDATE ' . $tables .
"\n"
351 . ($where ?
"\nWHERE" . $where :
"");
355 public function Insert($table,
$arFields, $error_position =
"", $DEBUG =
false, $EXIST_ID =
"", $ignore_errors =
false)
366 $str1 .= ($str1 <>
"" ?
", " :
"") . $this->
quote($field);
367 if ((
string)$value ==
'')
369 $str2 .= ($str2 <>
"" ?
", " :
"") .
"''";
373 $str2 .= ($str2 <>
"" ?
", " :
"") . $value;
379 $strSql =
"INSERT INTO " . $table .
"(ID," . $str1 .
") VALUES ('" . $this->
ForSql($EXIST_ID) .
"'," . $str2 .
")";
383 $strSql =
"INSERT INTO " . $table .
"(" . $str1 .
") VALUES (" . $str2 .
")";
391 $res = $this->
Query($strSql, $ignore_errors, $error_position);
408 public function Add($tablename,
$arFields, $arCLOBFields = [], $strFileDir =
"", $ignore_errors =
false, $error_position =
"",
$arOptions = [])
412 if (!isset($this) || !is_object($this) || !isset($this->type))
414 return $DB->Add($tablename,
$arFields, $arCLOBFields, $strFileDir, $ignore_errors, $error_position,
$arOptions);
420 "INSERT INTO " . $tablename .
"(" . $arInsert[0] .
") " .
421 "VALUES(" . $arInsert[1] .
")";
429 register_shutdown_function([&$this,
"UnLockTables"]);
430 $this->
Query(
"LOCK TABLE " .
$str,
false,
'', [
"fixed_connection" =>
true]);
435 $this->
Query(
"UNLOCK TABLES",
true,
'', [
"fixed_connection" =>
true]);
445 return "INSTR($str, $toFind)";
448 public function CreateIndex($indexName, $tableName, $columns, $unique =
false, $fulltext =
false)
450 foreach ($columns as
$i => $columnName)
452 $columns[
$i] = $this->
quote($columnName);
457 $indexType =
'UNIQUE';
461 $indexType =
'FULLTEXT';
468 return $this->
Query(
'CREATE ' . $indexType .
' INDEX ' . $this->
quote($indexName) .
' ON ' . $this->
quote($tableName) .
'(' . implode(
',', $columns) .
')',
true);
473 return mysqli_query($this->db_Conn, $strSql);
478 return "(" . $this->
GetErrorCode() .
") " . mysqli_error($this->db_Conn);
483 return mysqli_errno($this->db_Conn);
490 $strValue = mb_substr($strValue ??
'', 0, $iMaxLength);
494 return mysqli_real_escape_string($this->db_Conn, str_replace(
"\\",
"\\\\", $strValue ??
''));
499 if (!isset($this->column_cache[$table]))
501 $this->column_cache[$table] = [];
504 $dbResult = $this->query(
"SELECT * FROM " . $this->
quote($table) .
" LIMIT 0");
506 $resultFields = mysqli_fetch_fields(
$dbResult->result);
507 foreach ($resultFields as $field)
509 switch ($field->type)
511 case MYSQLI_TYPE_TINY:
512 case MYSQLI_TYPE_SHORT:
513 case MYSQLI_TYPE_LONG:
514 case MYSQLI_TYPE_INT24:
515 case MYSQLI_TYPE_CHAR:
519 case MYSQLI_TYPE_DECIMAL:
520 case MYSQLI_TYPE_NEWDECIMAL:
521 case MYSQLI_TYPE_FLOAT:
522 case MYSQLI_TYPE_DOUBLE:
526 case MYSQLI_TYPE_DATETIME:
527 case MYSQLI_TYPE_TIMESTAMP:
531 case MYSQLI_TYPE_DATE:
532 case MYSQLI_TYPE_NEWDATE:
541 $this->column_cache[$table][$field->name] = [
542 "NAME" => $field->name,
547 return $this->column_cache[$table];
552 return mysqli_thread_id($this->db_Conn);
DoConnect($connectionName='')
Query($strSql, $bIgnoreErrors=false, $error_position="", $arOptions=[])
CharToDateFunction($strValue, $strType="FULL", $lang=false)
ForSql($strValue, $iMaxLength=0)
PrepareUpdate($strTableName, $arFields, $strFileDir="", $lang=false, $strTableAlias="")
ForSqlLike($strValue, $iMaxLength=0)
PrepareInsert($strTableName, $arFields)
DatetimeToDateFunction($strValue)
PrepareUpdateBind($strTableName, $arFields, $strFileDir, $lang, &$arBinds, $strTableAlias="")
Insert($table, $arFields, $error_position="", $DEBUG=false, $EXIST_ID="", $ignore_errors=false)
Add($tablename, $arFields, $arCLOBFields=[], $strFileDir="", $ignore_errors=false, $error_position="", $arOptions=[])
CompareDates($date1, $date2)
static CurrentDateFunction()
static CurrentTimeFunction()
DatetimeToTimestampFunction($fieldName)
DateFormatToDB($format, $field=false)
CreateIndex($indexName, $tableName, $columns, $unique=false, $fulltext=false)
PrepareUpdateJoin($strTableName, $arFields, $from, $where)
PrepareFields($strTableName, $strPrefix="str_", $strSuffix="")
if(!defined('SITE_ID')) $lang
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)