2014-11-27 2 views
0
"select " . TABLE_PREFIX.DB_USERTABLE . "." . DB_USERTABLE_USERID . 
" userid, " . TABLE_PREFIX.DB_USERTABLE . "." . DB_USERTABLE_NAME . 
" username, " . TABLE_PREFIX.DB_USERTABLE . "." . DB_USERTABLE_NAME . 
" link, " . DB_AVATARFIELD . 
" avatar,substring_index(substring_index(wp_usermeta.meta_value ,'"',-2),'"',1) role from " . 
TABLE_PREFIX.DB_USERTABLE . 
"left join wp_usermeta on " . TABLE_PREFIX.DB_USERTABLE . 
"." . DB_USERTABLE_USERID . 
"= wp_usermeta.user_id left join cometchat_status on " . 
TABLE_PREFIX.DB_USERTABLE . "." . DB_USERTABLE_USERID . 
" = cometchat_status.userid " . DB_AVATARTABLE . 
" where (select count(*) from wp_bp_friends where (initiator_user_id='" . 
$userid . 
"' and friend_user_id=wp_users.ID) or (initiator_user_id=wp_users.ID and friend_user_id='" . 
$userid . 
"'))=1 and wp_usermeta.meta_key = 'wp_capabilities' order by username asc" 

На подстроке есть ошибка, как этого избежать.Ошибка анализа: синтаксическая ошибка, неожиданная '', -2), '' (T_CONSTANT_ENCAPSED_STRING), ожидающая ',' или ';'

+1

Это не проблема mysql. Похоже, вы используете php для получения данных из базы данных mysql, поэтому добавьте тег php и еще один код. – Jens

+0

Я рекомендую вам использовать php-редактор, например net-beans или PHPStorm, если сможете. Они показывают точное местоположение этих ошибок! – undone

ответ

1

Проблема эта часть заявления:

" avatar,substring_index(substring_index(wp_usermeta.meta_value ,'"',-2),'"',1) role from " 

Вы используете " разграничить PHP строку, но внутри него вы пытаетесь использовать строки SQL, содержащие ". Вложенная цитата завершает строку PHP. Вам нужно бежать внедренные кавычки:

" avatar,substring_index(substring_index(wp_usermeta.meta_value ,'\"',-2),'\"',1) role from " 
1

Вы " двойные кавычки внутри вашего заявления MySQL. Они интерпретируются PHP как закрытие строки, так что вам нужно, чтобы избежать их: \"

"select ".TABLE_PREFIX.DB_USERTABLE.".".DB_USERTABLE_USERID." userid, ".TABLE_PREFIX.DB_USERTABLE.".".DB_USERTABLE_NAME." username, ".TABLE_PREFIX.DB_USERTABLE.".".DB_USERTABLE_NAME." link, ".DB_AVATARFIELD." avatar,substring_index(substring_index(wp_usermeta.meta_value ,'\"',-2),'\"',1) role from ".TABLE_PREFIX.DB_USERTABLE."left join wp_usermeta on ".TABLE_PREFIX.DB_USERTABLE.".".DB_USERTABLE_USERID."= wp_usermeta.user_id left join cometchat_status on ".TABLE_PREFIX.DB_USERTABLE.".".DB_USERTABLE_USERID." = cometchat_status.userid ".DB_AVATARTABLE." where (select count(*) from wp_bp_friends where (initiator_user_id='".$userid."' and friend_user_id=wp_users.ID) or (initiator_user_id=wp_users.ID and friend_user_id='".$userid."'))=1 and wp_usermeta.meta_key = 'wp_capabilities' order by username asc" 
1

Вы должны бежать двойные кавычки в этом коде:

"avatar,substring_index(substring_index(wp_usermeta.meta_value ,'"',-2),'"',1) role from " 

превратить это:

"avatar,substring_index(substring_index(wp_usermeta.meta_value ,'\"',-2),'\"',1) role from " 

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

1

Проблема эта часть:

" avatar,substring_index(substring_index(wp_usermeta.meta_value ,'"',-2),'"',1) role from " . 

У вас есть двойные кавычки внутри double-quoted string. Те должны быть экранированы с помощью обратной косой черты:

" avatar,substring_index(substring_index(wp_usermeta.meta_value ,'\"',-2),'\"',1) role from " . 

Однако, при построении сложных строк, как это, я бы настоятельно рекомендуем вам использовать Heredoc синтаксис для улучшения читаемости. Это может выглядеть примерно так:

<?php 

    $utable = TABLE_PREFIX.DB_USERTABLE; 
    $uid = DB_USERTABLE_USERID; 
    $uname = DB_USERTABLE_NAME; 
    $atable = DB_AVATARTABLE; 
    $afield = DB_AVAYATFIELD; 

    echo <<<_ 
select $utable.$uid 
    userid, $utable.$uname 
    username, $utable.$uname 
    link, $afield 
    avatar,substring_index(substring_index(wp_usermeta.meta_value ,'"',-2),'"',1) 
role from $utable 
left join wp_usermeta on $utable.$uid = wp_usermeta.user_id 
left join cometchat_status on $utable.$uid = cometchat_status.userid $atable 
where 
    (select count(*) from wp_bp_friends 
     where (initiator_user_id='$userid' and friend_user_id=wp_users.ID) 
      or (initiator_user_id=wp_users.ID and friend_user_id='$userid') 
    )=1 
    and wp_usermeta.meta_key = 'wp_capabilities' order by username asc 
_; 

Обратите внимание, что constants не раскладываются Внутри Heredoc, так что вы должны хранить их в переменных первой.

Если вам нравится, вы можете заменить идентификатор закрытия (_) на что-то более читаемое, например ENDSQL или подобное.

+0

Правильно, ОП должен полностью переписать беспорядок, а не «фиксировать» его. – georg

Смежные вопросы