2015-01-08 4 views
-1

У меня есть PHP, который извлекает все записи сотрудников в БД.Передача переменной на статическую функцию

Теперь я хочу добавить предложение, чтобы он мог SELECT * WHERE companyId = x.

Im, используя GET для извлечения companyId для использования.

Мой вопрос в том, как я могу передать $ статической функции?

function viewStaffInCompany(){ 

    $results = array(); 
    $companyClause = $_GET["companyClause"]; 
    echo $companyClause . "<br><hr>"; 

    $data = Staff::getCompanyStaffList(); 
    $results['staff'] = $data['results']; 
    $results['totalRows'] = $data['totalRows']; 

    require("templates/viewStaff.php"); 

}; 

и

getCompanyStaffList(); 

public static function getCompanyStaffList($numRows=1000000, $order="id ASC", $companyClause) { 
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 

    $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM Staff WHERE $companyClause ORDER BY " . $order . " LIMIT :numRows"; 

    $st = $conn->prepare($sql); 
    $st->bindValue(":numRows", $numRows, PDO::PARAM_INT); 
    $st->execute(); 
    $list = array(); 

    while ($row = $st->fetch()) { 
     $users = new Staff($row); 
     $list[] = $users; 
    } 

    // Now get the total number of staff that matched the criteria 
    $sql = "SELECT FOUND_ROWS() AS totalRows"; 
    $totalRows = $conn->query($sql)->fetch(); 
    $conn = null; 
    return (array ("results" => $list, "totalRows" => $totalRows[0])); 
    } 
+0

вар $ VariableName; в вашей функции {} –

+1

Вы не должны. По крайней мере, это не так, как сейчас, поскольку он откроет ворота для внедрения sql (в некоторых конфигурациях PDO). Подтвердите содержимое записи GET, прежде чем делать что-либо еще с ней, или измените функцию, чтобы привязать параметр к запросу в appripiate. После этого посмотрите на приведенный ниже ответ. – Rangad

+0

спасибо @Rangad прочитает – atoms

ответ

3

Просто в качестве параметра.

Staff::getCompanyStaffList(1000000, "id ASC", $companyClause); 

Но я бы refactore этого списка параметров, так как $companyClause требуется, поэтому, вам нужно будет пройти первые 2 Params всегда, то, что имеет значение по умолчанию, если не дано.

Так оно и должно быть:

public static function getCompanyStaffList($companyClause, $numRows=1000000, $order="id ASC") { 
+0

Это создаст проблему безопасности, так как это может привести к возможной инъекции sql. – Rangad

+0

спасибо lolka, я обновил код, но его не работает. Возьмите на борт то, что сказал @ Rangad, тоже посмотрит на санацию – atoms

+0

Что значит не работает? – vaso123