Неожиданно (при установке значения переменной с помощью функции - PullRequest
0 голосов
/ 13 марта 2012

У меня есть еще один вопрос по PHP. У меня есть класс, который должен войти в базу данных и найти метки, которые будут использоваться в основном файле программы. Когда я пытаюсь подключиться к своей базе данных, мне кажется, что мне не нравится тот факт, что я использую функцию для установки значения переменной (я предполагаю, что именно поэтому у меня появляется «неожиданная (» ошибка)

Вот класс:

class lblFinder
        {
            //declarations
                private $dbConnection=mysql_connect("localhost", "root", "");
                private $dbName="matecalculator";

                private $cmd="";
                private $size=0;
            //end of declarations

            public function setSize($shape)
            {
                if($dbConnection===false)
                {
                    echo "<p>Something went wrong.</p><p> Error Code:".mysql_errno().": ".mysql_error()."</p>";
                }
                else
                {
                    if(mysql_select_db($this->dbName,$this->dbConnection))
                    {
                        $cmd="SELECT COUNT(varID) FROM tblVariables WHERE shapeID IN(SELECT shapeID FROM tblShapes WHERE shapeName= '".$shape."')";
                        $qryResults=mysql_query($this->cmd,$dbConnection);

                        //get results
                        while (($Row = mysql_fetch_row($QueryResult)) !== FALSE)
                        {
                            $size=$Row[0];
                        }

                        mysql_free_result($qryResults);
                    }
                    else
                    {
                        echo "<p>Something went wrong.</p><p> Error Code:".mysql_errno().": ".mysql_error()."</p>";
                    }
                }
            }

            public function getSize()
            {
                return $this->size;
            }

            public function setLabels($shape)
            {
                //declarations
                    $l=array();
                //end of declarations

                $this->cmd="SELECT varDesc FROM tblVariables WHERE shapeID IN(SELECT shapeID FROM tblShapes WHERE shapeName= '".$shape."')";
                $qryResults=mysql_query($cmd,$dbConnection);

                $i=0;
                if(($Row = mysql_fetch_row($QueryResult)) !== FALSE)
                {
                    $l[i]=$Row[0];
                    $i++;
                }
                mysql_free_result($qryResults);
                return l;
            }
        }

Я использую тестовый файл для передачи фиктивных значений в приложение. Соответствующий код выглядит следующим образом:

        $arr=array();
        $lf=new lblFinder;
        $lf->setSize("Round");
        echo "Size=".$lf->getSize();
        $arr=$lf->setLabels("Round");
        $i=0;
        foreach($arr AS $label)
        {
            echo "Label $i is $label";
        }

Я знаю, что "Round" является допустимым значением в моей БД. Я также знаю, что моя логика работает, потому что я построил это точное приложение в ASP.NET, и это сработало (к сожалению, клиент не сказал нам, что asp не будет работать, пока он не будет написан ... поэтому мне нужно использовать PHP )

Функциональный код ASP выглядит следующим образом

 public class lblFinder
 {
private static string connectionString;
private MySqlConnection con;
private MySqlCommand cmd;
private MySqlDataReader reader;
private int size;
private int i = 0;

public lblFinder(string connStr, MySqlConnection connection, MySqlCommand c, MySqlDataReader r)
{
    connectionString = connStr;
    con = connection;
    reader = r;
    cmd = c;
    cmd.Connection = con;
}

public void setSize(string shapeName)
{
    cmd.CommandText = "SELECT COUNT(varID) FROM tblVariables WHERE shapeID IN(SELECT shapeID FROM tblShapes WHERE shapeName= '" + shapeName + "')";
    reader = cmd.ExecuteReader();
    if (reader.Read())
    {
        size = reader.GetInt32(0);
    }
    reader.Close();
}

public int getSize()
{
    return size;
}

public string[] setLabels(string[] l, string shapeName)
{
    i = 0;

    cmd.CommandText = "SELECT varDesc FROM tblVariables WHERE shapeID IN(SELECT shapeID FROM tblShapes WHERE shapeName= '" + shapeName + "')";
    reader = cmd.ExecuteReader();

    while (reader.Read())
    {
        l[i] = reader.GetString("varDesc");
        i++;
    }
    reader.Close();

    return l;
}
}

1 Ответ

4 голосов
/ 13 марта 2012

В объявлении переменной нельзя вызывать функцию.

private $dbConnection=mysql_connect("localhost", "root", "");

Вместо этого используйте конструктор:

private $dbConnection;
function __construct() {
  $this->dbConnection=mysql_connect("localhost", "root", "");
}
...