SQL语法错误导致数据库错误

时间:2016-12-05 20:25:41

标签: mysql wordpress

这是我得到的错误:

  

[您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得在''附近使用的正确语法。在第1行]

我没有收到错误。我无法找到它。

这是我的代码:

function my_bp_adminbar_notifications_menu() {
global $bp;

if ( !is_user_logged_in() )
    return false;

echo '<li id="top-notification">';
_e( 'Alerts', 'buddypress' );

if ( $notifications = bp_notifications_get_notifications_for_user( $bp->loggedin_user->id ) ) { ?>
    <span><?php echo count( $notifications ) ?></span>
<?php
}

if ( $notifications ) {
    $counter = 0;
    for ( $i = 0; $i < count($notifications); $i++ ) {
        $alt = ( 0 == $counter % 2 ) ? ' class="alt"' : ''; ?>

        <li<?php echo $alt ?>><?php echo $notifications[$i] ?></li>

        <?php $counter++;
    }
} else { ?>

这里发生了什么?我没有看到一个可能有问题的单引号。

1 个答案:

答案 0 :(得分:1)

可能是您正在调用某些函数,而这些函数又会运行SQL查询。我看到你正在调用两个函数:is_user_logged_in()这是WordPress代码中的标准函数,bp_notifications_get_notifications_for_user()是BuddyPress的一部分,它是一个WordPress插件。

我猜BuddyPress代码有代码错误。我做了一个搜索,发现他们有很多关于SQL语法错误的错误报告,所以我猜他们不会测试他们的代码。

首先,您应该升级到最新的BuddyPress版本以查看错误是否已经修复。如果问题仍然存在,请与他们的支持小组联系:https://buddypress.org/support/

解释你得到的错误:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法

MySQL中的语法错误报告之后的部分语法分析器混淆的地方。例如,如果在选择列表中添加额外的逗号:

SELECT a, b, c, FROM ...

语法错误会报告“FROM”附近的问题,因为该关键字在逗号后面是意外的。

如果在''附近收到语法错误报告,那么这意味着解析器在到达SQL查询结束时会感到困惑,因为它找不到预期的结果。这是由许多类型的错误引起的,例如,因为SQL无法关闭括号或引号,或者使用了没有必需参数的子句关键字。

以下是在查询结束时发生语法错误的一些可能示例:

SELECT * FROM mytable WHERE
SELECT * FROM mytable WHERE col =
SELECT * FROM mytable WHERE col = 'string
SELECT * FROM mytable WHERE (x OR y

基本上,任何类型的“未完成”语法都会在最后导致此错误。