如何在PDO查询中添加参数到子句

时间:2015-02-01 02:57:18

标签: php mysql pdo where

我正在使用代码来运行定义clasue($ datimeClause)的Mysql查询。我想用第二个参数(:方法)运行查询但是如果我改变了该子句的语法,那么查询就不会运行。我是PDO的新手,有人可以告诉我如何重新格式化子句以查询第二个参数。

这是查询

public static function getList( $numRows=1000000, $datimeId=null ) {
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $datimeClause = $datimeId ? "WHERE DatimeId = :datimeId" : "";
    $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM notify $datimeClause";
    $st = $conn->prepare( $sql );
    $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
    $st->bindValue( ":datimeId", $datimeId, PDO::PARAM_INT );
    $st->execute();
    $list = array();
    while ( $row = $st->fetch() ) {
      $text = new Text( $row );
      $list[] = $text;
    }

这是调用它的函数。

function newAutoText() {
    $results = array();
    $datimeId = ( isset( $_GET['datimeId'] ) && $_GET['datimeId'] ) ? (int)$_GET['datimeId'] : null;
    $results['datime'] = Text::getById( $datimeId );
    $data = Text::getList( 100000, $results['datime'] ? $results['datime']->id : null);
    $results['texts'] = $data['results'];
    $results['totalRows'] = $data['totalRows']; 


    require( TEMPLATE_PATH . "/sms.php" );
}

2 个答案:

答案 0 :(得分:0)

所以试试吧:

public static function getList( $numRows=1000000, $datimeId=null, $andClause=null ) {

在这里: $data = Text::getList( 100000, $results['datime'] ? $results['datime']->id : null, 'testMethod');

然后离开这里:

$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM notify $datimeClause";
if ($andClause!=null ) $sql .= " AND method= :method ";
    $st = $conn->prepare( $sql );
    $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
    $st->bindValue( ":datimeId", $datimeId, PDO::PARAM_INT );
if ($andClause!=null ) 
    $st->bindValue( ":method", $andClause, PDO::PARAM_STR );

答案 1 :(得分:0)

好的,我在调用函数中运行的第一个getById查询是任意的。

这有效:

public static function getList( $numRows=1000000, $datimeId, $method=1 ) {
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $datimeClause = $datimeId ? "WHERE DatimeId = :datimeId" : "";
    $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM notify $datimeClause AND Method= :method LIMIT :numRows";
    $st = $conn->prepare( $sql );
    $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
    $st->bindValue( ":datimeId", $datimeId, PDO::PARAM_INT );
    $st->bindValue( ":method", $method, PDO::PARAM_INT );
    $st->execute();
    $list = array();

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

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

function newAutoText() {
    $results = array();
    $datimeId = ( isset( $_GET['datimeId'] ) && $_GET['datimeId'] ) ? (int)$_GET['datimeId'] : null;
    $data = Text::getList( 100000, $datimeId, '1');
    $results['texts'] = $data['results'];
    $results['totalRows'] = $data['totalRows']; 


    require( TEMPLATE_PATH . "/sms.php" );
}