Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
83 lines
3.2 KiB
PHP
83 lines
3.2 KiB
PHP
<?php
|
||
/**
|
||
* Запуск GetProjectFull_one_query.sql для проверки.
|
||
* Использование: php sql/run_GetProjectFull.php [projectid]
|
||
* По умолчанию projectid = 354918
|
||
*/
|
||
error_reporting(E_ALL);
|
||
ini_set('display_errors', 1);
|
||
|
||
$projectid = isset($argv[1]) ? (int)$argv[1] : 354918;
|
||
|
||
$_SERVER['HTTP_HOST'] = 'localhost';
|
||
require_once dirname(__DIR__) . '/config.inc.php';
|
||
if (!isset($log) || !is_object($log)) {
|
||
$log = new class { function debug($m) {} function info($m) {} function error($m) {} function fatal($m) {} };
|
||
}
|
||
require_once dirname(__DIR__) . '/include/database/PearDatabase.php';
|
||
$adb = PearDatabase::getInstance();
|
||
if (!$adb) {
|
||
fwrite(STDERR, "Ошибка подключения к БД\n");
|
||
exit(1);
|
||
}
|
||
$sqlFile = __DIR__ . '/GetProjectFull_one_query.sql';
|
||
$sql = file_get_contents($sqlFile);
|
||
// Убрать однострочные комментарии (-- ...)
|
||
$sql = preg_replace('/--[^\n]*\n/', "\n", $sql);
|
||
// Убрать пустые строки подряд и пробелы в начале/конце
|
||
$sql = trim($sql);
|
||
// Подставить projectid вместо $1
|
||
$sql = str_replace('$1', $projectid, $sql);
|
||
|
||
set_time_limit(120);
|
||
ini_set('memory_limit', '256M');
|
||
|
||
// Режим проверки: только простой запрос (без тяжёлых подзапросов)
|
||
$simpleTest = (isset($argv[2]) && $argv[2] === '--simple');
|
||
if ($simpleTest) {
|
||
$sql = 'SELECT p.projectid, p.projectname, p.startdate, p.targetenddate, p.projectstatus
|
||
FROM vtiger_project p
|
||
INNER JOIN vtiger_crmentity e ON e.crmid = p.projectid AND e.deleted = 0
|
||
WHERE p.projectid = ? LIMIT 1';
|
||
$result = $adb->pquery($sql, array($projectid));
|
||
} else {
|
||
// Полный запрос выполняем через mysqli (PearDatabase с этим запросом даёт пустой результат)
|
||
$host = $dbconfig['db_server'];
|
||
$port = 3306;
|
||
if (!empty($dbconfig['db_port']) && preg_match('/:?(\d+)/', $dbconfig['db_port'], $m)) $port = (int)$m[1];
|
||
$mysqli = new mysqli($host, $dbconfig['db_username'], $dbconfig['db_password'], $dbconfig['db_name'], $port);
|
||
if ($mysqli->connect_error) {
|
||
fwrite(STDERR, "mysqli connect: " . $mysqli->connect_error . "\n");
|
||
exit(1);
|
||
}
|
||
$mysqli->set_charset('utf8');
|
||
$ok = $mysqli->real_query($sql);
|
||
if (!$ok) {
|
||
fwrite(STDERR, "mysqli error: " . $mysqli->error . "\n");
|
||
exit(1);
|
||
}
|
||
$res = $mysqli->store_result();
|
||
$row = $res ? $res->fetch_assoc() : null;
|
||
if ($res) $res->free();
|
||
$mysqli->close();
|
||
if (!$row) {
|
||
echo "Проект с projectid={$projectid} не найден или запрос вернул пусто.\n";
|
||
exit(0);
|
||
}
|
||
echo json_encode($row, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||
exit(0);
|
||
}
|
||
|
||
if (!$result) {
|
||
fwrite(STDERR, "Ошибка запроса: " . print_r($adb->database->errorInfo(), true) . "\n");
|
||
exit(1);
|
||
}
|
||
|
||
$row = $adb->fetchByAssoc($result);
|
||
if (!$row) {
|
||
echo "Проект с projectid={$projectid} не найден или запрос вернул пусто.\n";
|
||
exit(0);
|
||
}
|
||
|
||
echo json_encode($row, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|