Search code examples
zend-framework2zend-db

How can i bind parameter in zf2 tablegateway


How can i bind parameter in zend framework 2 using tablegateway, here is the code i am using

$adapter     =   $this->tableGateway->getAdapter(); 
$result      =   $adapter->query(
              "SELECT * "
             . "FROM TABLE "
             . "WHERE SOME_ID = $SOME "
             . "AND STATUS = 1 "          
);
$dataSource  =   $result->execute();        
$statement   =   $dataSource->getResource();
$result      =   $statement->fetchAll(\PDO::FETCH_OBJ);

please suggest me a secure query builder code


Solution

  • You are trying to bind parameter in Adapter not in TableGateway.
    It can be done on many ways, but example that you post

    $id  = 123;
    $res = $adapter->query(
        "SELECT * FROM TABLE WHERE SOME_ID = ? AND STATUS = 1", [$id]
    );
    var_dump($res->current());
    

    There is a second parameter in function query() which is

    @param string|array|ParameterContainer $parametersOrQueryMode 
    

    So you can play little bit with this option(s)... also check function Zend\Db\Adapter\Adapter::query();


    Easier way is to use TableGateway:

    $res = $this->tableGateway->select(['SOME_ID' => $id]);
    $res->current(); // than you can use also toArray(), current(), etc.