Codeigniter A Ошибка в базе данных. Номер ошибки: 1064

0

мы иногда сталкиваемся с ошибкой базы данных 1064 в браузере Chrome Chrome. но он работает отлично в других браузерах. пожалуйста, дайте мне знать любые решения, которые у вас есть.

Код ошибки:

Произошла ошибка базы данных. Номер ошибки: 1064. У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 1 выберите * из tbl_user_rights, где usr_id = **

Имя файла: helpers/common_helper.php Номер строки: 42 **

программный код: -

function user_has_right($rights_id) {
    $CI = get_instance();
    $CI->load->model('user_model');
    $user_id = $CI->session->userdata('user_id');
    $query = $CI->db->query("select * from " . TBL_USERS_RIGHTS . " where usr_id=" . $user_id);
    $rights = $query->result();
    $user_right = array();
    foreach ($rights as $right) {
        array_push($user_right, $right->sm_id);
    }// print_r($user_right);exit;
    if (in_array($rights_id, $user_right)) {
        return TRUE;
    } else {
        return FALSE;
    }
}
  • 0
    запускать запрос на выборку только тогда, когда $ user_id не пуст
Теги:
codeigniter
google-chrome

3 ответа

0
Лучший ответ

Вам нужно добавить условие для того, чтобы существовал либо идентификатор пользователя, либо нет. Попробуйте поставить условие, как в приведенном ниже коде. Надеюсь, это поможет вам решить эту проблему.

function user_has_right($rights_id) {
$CI = get_instance();
if($CI->session->userdata('user_id') != '')
{
    $CI->load->model('user_model');
    $user_id = $CI->session->userdata('user_id');
    $query = $CI->db->query("select * from " . TBL_USERS_RIGHTS . " where usr_id=" . $user_id);
    $rights = $query->result();
    $user_right = array();
    foreach ($rights as $right) {
        array_push($user_right, $right->sm_id);
    }// print_r($user_right);exit;
    if (in_array($rights_id, $user_right)) {
        return TRUE;
    } else {
        return FALSE;
    }
 }
 else
 {
      return FALSE;
 }
}
0

Пожалуйста, добавьте

$user_id = $CI->session->userdata('user_id');
$user_id = ($user_id && is_numeric($user_id)) ? $user_id : 0;

Он установит user_id как ноль, если он не получит ничего

0

Запрос не работает, потому что user_id пуст из сеанса. Я хотел бы предложить вернуть false, если user_id пуст (проверяя, является ли он нулевым), и я даже написал построитель запросов, который имеет преимущества экранирования user_id:

function user_has_right($rights_id) {
    $CI = get_instance();
    $CI->load->model('user_model'); // not sure where this is being used...
    $user_id = $CI->session->userdata('user_id');
    if (is_null($user_id)) {
        return false;
    }
    $query = $CI->db->get_where('tbl_users_rights', array('usr_id' => $user_id));
    //$query = $CI->db->query("select * from " . TBL_USERS_RIGHTS . " where usr_id=" . $user_id);
    if ($query->num_rows() == 0) {
         return false;
    }
    $rights = $query->result();
    $user_right = array();
    foreach ($rights as $right) {
        array_push($user_right, $right->sm_id);
    }// print_r($user_right);exit;
    if (in_array($rights_id, $user_right)) {
        return TRUE;
    } else {
        return FALSE;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню