1
0
Fork 0
mirror of https://github.com/DanielnetoDotCom/YouPHPTube synced 2025-10-03 01:39:24 +02:00

Updates to fix sql errors

This commit is contained in:
Daniel Neto 2023-10-04 11:12:56 -03:00
parent aa251eac71
commit e16565ebcd
7 changed files with 61 additions and 25 deletions

View file

@ -89,13 +89,19 @@ class sqlDAL
* @return boolean true on success, false on fail
*/
public static function writeSql($preparedStatement, $formats = "", $values = [])
public static function writeSql($preparedStatement, $formats = "", $values = [], $try=0)
{
global $global, $disableMysqlNdMethods;
if (empty($preparedStatement)) {
_error_log("writeSql empty(preparedStatement)");
return false;
}
/**
*
* @var array $global
* @var object $global['mysqli']
*/
// make sure it does not store autid transactions
$debug = debug_backtrace();
if (empty($debug[2]['class']) || $debug[2]['class'] !== "AuditTable") {
@ -104,6 +110,7 @@ class sqlDAL
try {
$audit->exec(@$debug[1]['function'], @$debug[1]['class'], $preparedStatement, $formats, json_encode($values), User::getId());
} catch (Exception $exc) {
_error_log('Error in writeSql: ' . $global['mysqli']->errno . " " . $global['mysqli']->error . ' ' . $preparedStatement);
log_error($exc->getTraceAsString());
}
}
@ -120,12 +127,6 @@ class sqlDAL
if (!_mysql_is_open()) {
_mysql_connect();
}
/**
*
* @var array $global
* @var object $global['mysqli']
*/
if (!($stmt = $global['mysqli']->prepare($preparedStatement))) {
log_error("[sqlDAL::writeSql] Prepare failed: (" . $global['mysqli']->errno . ") " . $global['mysqli']->error .
" preparedStatement = " . json_encode($preparedStatement) .
@ -140,7 +141,11 @@ class sqlDAL
try {
$stmt->execute();
} catch (Exception $exc) {
if (preg_match('/playlists_has_videos/', $preparedStatement)) {
if (empty($try) && $stmt->errno == 2006) { //MySQL server has gone away
_mysql_close();
_mysql_connect();
return self::writeSql($preparedStatement, $formats, $values, $try+1);
}else if (preg_match('/playlists_has_videos/', $preparedStatement)) {
log_error('Error in writeSql values: ' . json_encode($values));
}else if (preg_match('/Illegal mix of collations.*and \(utf8mb4/i', $global['mysqli']->error)) {
try {
@ -173,12 +178,10 @@ class sqlDAL
}
sqlDAL::eval_mysql_bind($stmt, $formats, $values);
try {
log_error('try again 2');
$stmt->execute();
log_error('try again 2 SUCCESS');
} catch (Exception $exc) {
log_error($exc->getTraceAsString());
log_error('Error in writeSql stmt->execute: ' . $global['mysqli']->errno . " " . $global['mysqli']->error . ' ' . $preparedStatement);
}
@ -218,14 +221,31 @@ class sqlDAL
public static function writeSqlTry($preparedStatement, $formats = "", $values = [])
{
global $global;
/**
* @var array $global
* @var object $global['mysqli']
*/
try {
return self::writeSql($preparedStatement, $formats, $values);
$return = self::writeSql($preparedStatement, $formats, $values);
if(!$return){
_error_log('Error in writeSqlTry return: ' . $global['mysqli']->errno . " " . $global['mysqli']->error . ' ' . $preparedStatement);
}
return $return;
} catch (\Throwable $th) {
_error_log($th->getMessage(), AVideoLog::$ERROR);
_error_log('Error in writeSqlTry: ' . $global['mysqli']->errno . " " . $global['mysqli']->error . ' ' . $preparedStatement);
_error_log('writeSqlTry: '.$th->getMessage(), AVideoLog::$ERROR);
$search = array('COLUMN IF NOT EXISTS', 'IF NOT EXISTS');
$replace = array('COLUMN', 'COLUMN');
$preparedStatement = str_ireplace($search, $replace, $preparedStatement);
return self::writeSql($preparedStatement, $formats, $values);
try {
return self::writeSql($preparedStatement, $formats, $values);
} catch (\Throwable $th) {
_error_log('Error in writeSqlTry retry: ' . $global['mysqli']->errno . " " . $global['mysqli']->error . ' ' . $preparedStatement);
_error_log('writeSqlTry retry: '.$th->getMessage(), AVideoLog::$ERROR);
return false;
}
}
}

View file

@ -14,7 +14,7 @@ class Plugin extends ObjectYPT
protected $name;
protected $uuid;
protected $dirName;
protected $pluginVersion;
protected $pluginversion;
public static function getSearchFieldsNames()
{
@ -43,7 +43,7 @@ class Plugin extends ObjectYPT
public function getPluginVersion()
{
return $this->pluginVersion;
return $this->pluginversion;
}
public function getName()
@ -96,7 +96,7 @@ class Plugin extends ObjectYPT
public function setPluginversion($pluginVersion)
{
$this->pluginVersion = $pluginVersion;
$this->pluginversion = $pluginVersion;
}
public static function setCurrentVersionByUuid($uuid, $currentVersion)

View file

@ -7,14 +7,15 @@ if (!isset($global['systemRootPath'])) {
require_once $global['systemRootPath'] . 'objects/user.php';
require_once $global['systemRootPath'] . 'objects/plugin.php';
if (!User::isAdmin()) {
die('{"error":"' . __("Permission denied") . '"}');
forbiddenPage('Permission denied');
}
if (empty($_POST['name'])) {
die('{"error":"' . __("Name can't be blank") . '"}');
forbiddenPage('Name can\'t be blank');
}
ini_set('max_execution_time', 300);
require_once $global['systemRootPath'] . 'plugin/AVideoPlugin.php';
$res = AVideoPlugin::updatePlugin($_POST['name']);
die(json_encode($res));
$obj = new stdClass();
$obj->error = !AVideoPlugin::updatePlugin($_POST['name']);
$obj->msg = '';
die(json_encode($obj));

View file

@ -7,13 +7,14 @@ if (!isset($global['systemRootPath'])) {
require_once $global['systemRootPath'] . 'objects/user.php';
require_once $global['systemRootPath'] . 'objects/plugin.php';
if (!User::isAdmin()) {
die('{"error":"'.__("Permission denied").'"}');
forbiddenPage('Permission denied');
}
if (empty($_POST['name'])) {
forbiddenPage('Name can\'t be blank');
die('{"error":"'.__("Name can't be blank").'"}');
}
if (empty($_POST['uuid'])) {
die('{"error":"'.__("UUID can't be blank").'"}');
forbiddenPage('UUID can\'t be blank');
}
$obj = new Plugin(0);
$obj->loadFromUUID($_POST['uuid']);

View file

@ -1334,6 +1334,7 @@ class AVideoPlugin
$currentVersion = $p->getPluginVersion();
$uuid = $p->getUUID();
_error_log("AVideoPlugin::updatePlugin name=($name) uuid=($uuid) ");
//var_dump($name, method_exists($p, 'updateScript'));exit;
if (method_exists($p, 'updateScript')) {
_error_log("AVideoPlugin::updatePlugin method_exists ", AVideoLog::$WARNING);
if ($p->updateScript()) {

View file

@ -43,6 +43,7 @@ abstract class PluginAbstract {
$pattern = '/updateV([\d\.]+)\.sql$/'; // This pattern will match files like "updateV2.0.sql" and capture the version "2.0"
$dir = $global['systemRootPath'] . "plugin/{$pluginName}/install/";
//var_dump($dir);exit;
if(is_dir($dir)){
$files = scandir($dir);
@ -64,16 +65,27 @@ abstract class PluginAbstract {
// Iterate through sorted files
foreach ($versions as $entry) {
//var_dump($pluginName, $entry['version'], AVideoPlugin::compareVersion($pluginName, $entry['version']) < 0);
if (AVideoPlugin::compareVersion($pluginName, $entry['version']) < 0) {
_error_log("Update plugin {$pluginName} to version {$entry['version']}");
$filename = $dir . '/' . $entry['filename'];
$sqls = file_get_contents($filename);
$sqlParts = explode(";", $sqls);
//var_dump($sqlParts);
foreach ($sqlParts as $value) {
sqlDal::writeSqlTry(trim($value));
$sql = trim($value);
if(empty($sql)){
continue;
}
if(sqlDal::writeSqlTry($sql)){
_error_log("Update plugin {$pluginName} to version {$entry['version']} SQL success");
}else{
_error_log("Update plugin {$pluginName} to version {$entry['version']} SQL error: {$value}");
}
}
}
}$files = scandir($dir);
}
$files = scandir($dir);
$versions = [];

View file

@ -659,6 +659,7 @@ $wwbnIndexPlugin = AVideoPlugin::isEnabledByName('WWBNIndex');
success: function(response) {
modal.hidePleaseWait();
$("#grid").bootgrid('reload');
avideoResponse(response);
}
});
});