Files
crm.clientright.ru/sql/run_GetProjectFull.php
Fedor 01c4fe80b5 chore: snapshot current working tree changes
Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
2026-03-26 14:19:01 +03:00

83 lines
3.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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);