1
/**
     * Prepares and executes an SQL statement with bound data.
     *
     * @param  mixed  $sql  The SQL statement with placeholders.
     *                      May be a string or Zend_Db_Select.
     * @param  mixed  $bind An array of data to bind to the placeholders.
     * @return Zend_Db_Statement_Interface
     */ 
    public function query($sql, $bind = array())
        {
            // connect to the database if needed
            $this->_connect();

            // is the $sql a Zend_Db_Select object?
            if ($sql instanceof Zend_Db_Select) {
                if (empty($bind)) {
                    $bind = $sql->getBind();
                }

                $sql = $sql->assemble();
            }

            // make sure $bind to an array;
            // don't use (array) typecasting because
            // because $bind may be a Zend_Db_Expr object
            if (!is_array($bind)) {
                $bind = array($bind);
            }

            // prepare and execute the statement with profiling
            $stmt = $this->prepare($sql);
            $stmt->execute($bind);

            // return the results embedded in the prepared statement object
            $stmt->setFetchMode($this->_fetchMode);
            return $stmt;
        }

上記のコードは からZend/Db/Adapter/Abstract.phpのもので、コメントはありますが、$bind の使い方がまだわかりません。可能であれば、例を挙げて説明してください。
ありがとう。

4

1 に答える 1

0

$bindパラメータ化されたクエリの配列引数です。

// $bind with single param:
$obj->query('SELECT * FROM TableName WHERE IDColumn = ?', array(1));
// OR
$obj->query('SELECT * FROM TableName WHERE IDColumn = ?', 1);

意味:

SELECT * FROM TableName WHERE IDColumn = 1

// $bind with multiparams:
$obj->query('SELECT * FROM TableName WHERE somefield BETWEEN ? AND ?', array(10, 15));

意味:

SELECT * FROM TableName WHERE somefield BETWEEN 10 AND 15

// $bind omitted at all:
$obj->query('SELECT * FROM TableName ORDER BY somefield');

意味:

SELECT * FROM TableName ORDER BY somefield

$sqlが のインスタンスである場合、Zend_Db_Select独自のバインディングが含まれている可能性があります。したがって、指定された$bindが空または省略されている場合、$sqlのバインディングが割り当てられます。

于 2013-04-19T07:45:28.627 に答える