Ошибка после обновления mysql

Weblady
На сайте с 26.07.2011
Offline
147
601

Добрый день! После обновления mysql при авторизации на сайте выдает ошибку:

Database error in vCard PRO:
INVALID SQL: UPDATE vcard_sessions SET user_id='211', cpuser_id='' WHERE sid='f1999d55183ef3a' AND mix='9e2dfc0dd2740b4980520e8a3725077b'
mysql error: Incorrect integer value: '' for column `rc_card`.`vcard_sessions`.`cpuser_id` at row 1
mysql error number: 1366
Date: 2019/12/21 - 08:24:08 PM
Script: /login.php

Вероятно что-то изменилось в синтаксисе mysql, раньше он распознавал пустое значение в запросе для поля с типом integer как 0 или null, а сейчас выдаёт просто ошибку.

Помогите, пожалуйста, решить проблему.

Код файла login.php

<?php

//***************************************************************************//
// //
// Program Name : vCard PRO //
// Program Version : 3.1 Build 4 //
// Program Author : Joao Kikuchi, Belchior Foundry //
// Home Page : http://www.belchiorfoundry.com //
// Supplied by : WTN-WDYL Team //
// Nullified By : WTN-WDYL Team //
// Distribution : via WebForum, ForumRU and associated file dumps //
// //
// (C) Copyright 2001-2005 Belchior Foundry //
//***************************************************************************//
define('IN_VCARD', true);
define('CURR_PAGE','login.php');
$templatesused = 'page_user_login';
include('./lib.inc.php');
//var_dump($user);
//exit();
if ($action == 'logout')
{
$SESSION_site->logout();
my_redirect_die(INDEX_PAGE);
}

if ($action == 'login')
{
$is_logged = false;
$user_email = strtolower($user_email);
$sql = "SELECT * FROM ". TBL_USR_PROFILE ." AS u LEFT JOIN ". TBL_USR_GROUP ." AS g ON (u.usergroup_id=g.usergroup_id) WHERE u.user_email='". addslashes(trim($user_email)) ."' AND u.user_password='". md5(trim($user_password)) ."' ";
//$sql = "SELECT u.id as user_id, u.name as user_name, u.email as user_email, u.ip_address as user_ip, g.* FROM forum_members AS u RIGHT JOIN ". TBL_USR_GROUP ." AS g ON (g.usergroup_id='2') WHERE LOWER(email)='". addslashes($user_email) . "' AND password='". md5($user_password) ."' LIMIT 1 ";
$SESSION_site = new Session_site($sql,'su');
if($SESSION_site->is_logged())
{
$s = $SESSION_site->get_sid();
$user = $SESSION_site->data;
if ($user['user_active'] != 1)
{
usr_message_die(GENERAL_ERROR,$msg['error_mem_not_activation'],'back');
}

$SESSION_site->set_var('user',$fuser);
$is_logged = true;
if (empty($user['user_id']) )
{
$is_logged = false;
$data = $DB_site->query_first($sql);
if (!empty($data))
{
$SESSION_site->assign_sql_row_data($data);
}
unset($data);
unset($sql);
}
// cat access
$cat_access = array();
////$sql = "SELECT * FROM ". TBL_CARDS_CAT_PERMISSION ." WHERE usergroup_id='". $user['usergroup_id'] ."' ";
//$data_arr = $DB_site->query($sql);
//while($row = $DB_site->fetch_array($data_arr))
//{
// $cat_access[$row['cat_id']] = $row['cat_id'];
//}
//$DB_site->free_result($data_arr);
//$SESSION_site->set_var('cat_access',$cat_access);
//$SESSION_site->update();
unset($cat_access, $data_arr);
if (!empty($ref))
{
$url = urldecode($ref);
$url = str_replace('|', '?', $url);
}
else
{
$url = INDEX_PAGE;
}
my_redirect_die($url);
}
else
{
$is_logged = false;
usr_message_die(GENERAL_ERROR,$msg['error_mem_login_error'],'back');
}
}
if (!empty($user['user_id']))
{
my_redirect_die(INDEX_PAGE);
}

//eval("\$form_user_login = \"".get_template('form_user_login')."\";");

if ($action == 'modal'){
eval("make_output(\"".get_template('form_user_login')."\");");
exit();
}
include(VCARD_ROOT_PATH.'include/user_header.inc.php');
/* ################################### PAGE ############################## */
$url_ref = !empty($ref)? urlencode($ref) : urlencode(urldecode($url_ref));

eval("make_output(\"".get_template('page_user_login')."\");");
include(VCARD_ROOT_PATH.'include/user_footer.inc.php');
?>
LEOnidUKG
На сайте с 25.11.2006
Offline
1751
#1

Или переделать запросы на стандарт, что на мой взгляд лучше.

Или же в конфиг my.ini добавить:

sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Weblady
На сайте с 26.07.2011
Offline
147
#2

Одну похожую проблему решили добавлением кода

if (!isset($card_id) OR empty($card_id)) $card_id = 0;

LEOnidUKG, подскажите, пожалуйста, как переделать запросы на стандарт.

LEOnidUKG
На сайте с 25.11.2006
Offline
1751
#3
Одну похожую проблему решили добавлением кода

Вот так и решать.

Только вместо этого кода можно сделать так:

$card_id=intval($card_id);

ИЛИ же, ещё более правильно сделать, объявить переменную $card_id=0; до начала работы.

Weblady
На сайте с 26.07.2011
Offline
147
#4

LEOnidUKG, подскажите, пожалуйста, в коде файла login.php куда нужно добавить этот код?

LEOnidUKG
На сайте с 25.11.2006
Offline
1751
#5
webledi:
LEOnidUKG, подскажите, пожалуйста, в коде файла login.php куда нужно добавить этот код?

Без понятия, это надо весь движок смотреть. Можете программиста нанять он вам проверит код.

lonelywoolf
На сайте с 23.12.2013
Offline
151
#6

strict_mode надо выключить, скорее всего - и сайт править не придётся.

Платный и бесплатный хостинг с защитой от DDoS (http://aquinas.su)
Weblady
На сайте с 26.07.2011
Offline
147
#7

lonelywoolf, спасибо огромное! Помогло!

LEOnidUKG
На сайте с 25.11.2006
Offline
1751
#8
webledi:
lonelywoolf, спасибо огромное! Помогло!

Забавно, а я что написал sql_mode? 🍿

lonelywoolf
На сайте с 23.12.2013
Offline
151
#9
LEOnidUKG:
Забавно, а я что написал sql_mode? 🍿

Там гуглится оно по разному. Ну и вы не всё в строке вырубили, поэтому помогло.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий