diff --git a/app/Models/Torrent.php b/app/Models/Torrent.php index 6efa238d..e5f3569d 100644 --- a/app/Models/Torrent.php +++ b/app/Models/Torrent.php @@ -200,6 +200,15 @@ class Torrent extends NexusModel throw new \RuntimeException("Not supported database"); } + /** + * 重写获取 info_hash 的方法,确保从数据库读出时是正确的格式 + */ + public function getInfoHashAttribute($value): false|string + { + // PostgreSQL 返回 bytea 时可能是十六进制流或资源 + return is_resource($value) ? stream_get_contents($value) : $value; + } + public function getPickInfoAttribute() { $info = self::$pickTypes[$this->picktype] ?? null; diff --git a/include/functions.php b/include/functions.php index c6680524..6a202c09 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1277,9 +1277,9 @@ function parse_imdb_id($url) $url = str_pad($url, 7, '0', STR_PAD_LEFT); } if ($url != "" && preg_match("/[0-9]+/i", $url, $matches)) { - return $matches[0]; + return intval($matches[0]); } - return ''; + return null; } function build_imdb_url($imdb_id) @@ -6066,7 +6066,7 @@ function insert_torrent_tags($torrentId, $tagIdArr, $sync = false) if (empty($tagIdArr)) { return; } - $insertTagsSql = 'insert into torrent_tags (`torrent_id`, `tag_id`, `created_at`, `updated_at`) values '; + $insertTagsSql = 'insert into torrent_tags (torrent_id, tag_id, created_at, updated_at) values '; $values = []; foreach ($tagIdArr as $tagId) { if (in_array($tagId, $specialTags) && !$canSetSpecialTag) { diff --git a/include/globalfunctions.php b/include/globalfunctions.php index 40efd758..3bbe6d31 100644 --- a/include/globalfunctions.php +++ b/include/globalfunctions.php @@ -89,6 +89,9 @@ function sqlesc($value) { } function hash_pad($hash) { + if (is_resource($hash)) { + $hash = stream_get_contents($hash); + } return str_pad($hash, 20); } diff --git a/public/details.php b/public/details.php index 7084b49c..8be64c10 100644 --- a/public/details.php +++ b/public/details.php @@ -618,7 +618,7 @@ echo ""; $no_give = ""; $add_value =""; - $tempresult = sql_query ("SELECT count( DISTINCT `userid` ) as count FROM magic WHERE torrentid=".sqlesc($id)); + $tempresult = sql_query ("SELECT count( DISTINCT userid ) as count FROM magic WHERE torrentid=".sqlesc($id)); $count_user = mysql_fetch_array($tempresult); $count_user_number = $count_user['count']; diff --git a/public/takeupload.php b/public/takeupload.php index ffce0729..13320762 100644 --- a/public/takeupload.php +++ b/public/takeupload.php @@ -279,6 +279,13 @@ if (!is_writable($torrentSavePath)) { */ $descriptionArr = format_description($descr); $cover = get_image_from_description($descriptionArr, true, false); +if (\Nexus\Database\NexusDB::isPgsql()) { + $infoHashInsert = \Nexus\Database\NexusDB::raw("decode('" . bin2hex($infohash) . "', 'hex')"); +} elseif (\Nexus\Database\NexusDB::isMysql()) { + $infoHashInsert = $infohash; +} else { + throw new \RuntimeException("Not supported database"); +} $insert = [ 'filename' => $fname, 'owner' => $CURUSER['id'], @@ -305,7 +312,7 @@ $insert = [ 'added' => $dateTimeStringNow, 'last_action' => $dateTimeStringNow, // 'nfo' => $nfo, - 'info_hash' => $infohash, + 'info_hash' => $infoHashInsert, // 'pt_gen' => $_POST['pt_gen'] ?? '', // 'technical_info' => $_POST['technical_info'] ?? '', 'cover' => $cover, @@ -354,10 +361,10 @@ if (user_can('torrent-approval-allow-automatic')) { $insert['approval_status'] = \App\Models\Torrent::APPROVAL_STATUS_ALLOW; } if (user_can('torrent-set-price') && $paidTorrentEnabled) { - $insert['price'] = $_POST['price'] ?? 0; + $insert['price'] = intval($_POST['price'] ?? 0); } do_log("[INSERT_TORRENT]: " . nexus_json_encode($insert)); -$id = \Nexus\Database\NexusDB::insert('torrents', $insert); +$id = \App\Models\Torrent::query()->insertGetId($insert); //$ret = sql_query("INSERT INTO torrents (filename, owner, visible, anonymous, name, size, numfiles, type, url, small_descr, descr, ori_descr, category, source, medium, codec, audiocodec, standard, processing, team, save_as, sp_state, added, last_action, nfo, info_hash, pt_gen, technical_info) VALUES (".sqlesc($fname).", ".sqlesc($CURUSER["id"]).", 'yes', ".sqlesc($anonymous).", ".sqlesc($torrent).", ".sqlesc($totallen).", ".count($filelist).", ".sqlesc($type).", ".sqlesc($url).", ".sqlesc($small_descr).", ".sqlesc($descr).", ".sqlesc($descr).", ".sqlesc($catid).", ".sqlesc($sourceid).", ".sqlesc($mediumid).", ".sqlesc($codecid).", ".sqlesc($audiocodecid).", ".sqlesc($standardid).", ".sqlesc($processingid).", ".sqlesc($teamid).", ".sqlesc($dname).", ".sqlesc($sp_state) . //", " . sqlesc(date("Y-m-d H:i:s")) . ", " . sqlesc(date("Y-m-d H:i:s")) . ", ".sqlesc($nfo).", " . sqlesc($infohash). ", " . sqlesc($_POST['pt_gen']) . ", " . sqlesc($_POST['technical_info'] ?? '') . ")"); @@ -426,7 +433,7 @@ fire_event(\App\Enums\ModelEventEnum::TORRENT_CREATED, \App\Models\Torrent::quer //===notify people who voted on offer thanks CoLdFuSiOn :) if ($is_offer) { - $res = sql_query("SELECT `userid` FROM `offervotes` WHERE `userid` != " . $CURUSER["id"] . " AND `offerid` = ". sqlesc($offerid)." AND `vote` = 'yeah'") or sqlerr(__FILE__, __LINE__); + $res = sql_query("SELECT userid FROM offervotes WHERE userid != " . $CURUSER["id"] . " AND offerid = ". sqlesc($offerid)." AND vote = 'yeah'") or sqlerr(__FILE__, __LINE__); while($row = mysql_fetch_assoc($res)) {