Неожиданный T_ELSE в маленькой функции PHP - PullRequest
0 голосов
/ 28 октября 2009

У меня неожиданный T_ELSE для последнего в этой функции.

function QueryPeople($stringQuery, $table, $max, $cmd) {
    $con = mysqli_connect("localhost","user","password", "host");

    if ($cmd == "Option1") {
        $SearchSQL = "SELECT signature, firstname, birthdate FROM $table WHERE lower(signature) LIKE ?" . $max;

        if ($fetchData = $con->prepare($SearchSQL)) {
            $fetchData->bind_param("s", "%".$stringQuery."%");
            $fetchData->execute();
            $fetchData->bind_result($signature, $firstname, $birthdate);
            $rows = array();
        }
    } else if ($cmd == "Option2") {
        $searchSQL = "SELECT signature, firstname, birthdate FROM $table WHERE birthdate = ?" . $max;

        if ($fetchData = $con->prepare($searchSQL)) {
            $fetchData->bind_param(":birthdate", $stringQuery);
            $fetchData->execute();
            $fetchData->bind_result($signature, $firstname, $birthdate);
            $rows = array();
        }
    }

    while ($fetchData->fetch()) {
        $row = array(
            'signature' => $signature,
            'firstname' => $firstname,
            'birthdate' => $birthdate,
            );
            $rows[] = $row;
    }
    return $rows;
} else {                   // <-- This else doesn't have an if
    print_r($con->error);  // <-- This else doesn't have an if
}                          // <-- This else doesn't have an if
}

Я серьезно не могу понять, почему это происходит. Оба блока if должны быть самодостаточными, и оба они закрыты, и тогда он должен переходить в какое-то время, и только если if выглядит что-то подозрительно?

Ответы [ 4 ]

1 голос
/ 28 октября 2009

Где-то есть дополнительная скобка ... Если вы сделаете отступ в коде, вы увидите, что вы не закрыли каждый раздел должным образом ...

Вам нужно добавить if($con) перед первым if:

function QueryPeople($stringQuery, $table, $max, $cmd) {
    $con = mysqli_connect("localhost","user","password", "host");

    if($con){
        if ($cmd == "Option1") {

            $SearchSQL = "SELECT signature, firstname, birthdate FROM $table WHERE lower(signature) LIKE ?" . $max;

            if ($fetchData = $con->prepare($SearchSQL)) {
                $fetchData->bind_param("s", "%".$stringQuery."%");
                $fetchData->execute();
                $fetchData->bind_result($signature, $firstname, $birthdate);
                $rows = array();
            } 
        } else if ($cmd == "Option2") {

            $searchSQL = "SELECT signature, firstname, birthdate FROM $table WHERE birthdate = ?" . $max;

            if ($fetchData = $con->prepare($searchSQL)) {
                $fetchData->bind_param(":birthdate", $stringQuery);
                $fetchData->execute();
                $fetchData->bind_result($signature, $firstname, $birthdate);
                $rows = array();
            } 

        } 

        while ($fetchData->fetch()) {
            $row = array(
            'signature' => $signature,
            'firstname' => $firstname,
            'birthdate' => $birthdate,
            );
            $rows[] = $row;
        }
        return $rows;
    } else {
        print_r($con->error);
    }
}

В любом случае, я не думаю, что $ con> error покажет что-нибудь ... для этого вам понадобится mysql_error .

0 голосов
/ 28 октября 2009

Ваш последний параметр находится за пределами функциональных скобок, например:

function funcName() {
   // function body...
} else {
   // this is where your else is
}

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

0 голосов
/ 28 октября 2009

Ваш код неверный. Организуйте свой код аккуратно. Вы пропустили оператор if.

<?php
function QueryPeople($stringQuery, $table, $max, $cmd) {
  //

if ($cmd == "Option1") {

  //

    if ($fetchData = $con->prepare($SearchSQL)) {
     /**/
    } 

} else if ($cmd == "Option2") {

    //
    if ($fetchData = $con->prepare($searchSQL)) {
        /**/
    } 

} 
    while ($fetchData->fetch()) {
        /**/
   }
      return $rows;
    } else {        //<- WHAT else?
        print_r($con->error);
   }
}
0 голосов
/ 28 октября 2009

У вас есть двойная часть} .. см. Ниже

        $rows = array();
 } 
 } else if ($cmd == "Option2") 

изменить на

        $rows = array();

 } else if ($cmd == "Option2") 

ОБНОВЛЕНИЕ ..

упс ошибся

на самом деле вы забыли добавить

if($con) {
...