php中dao中的参数化查询问题

时间:2011-12-01 10:14:48

标签: php mysql

我正在使用phpdao进行数据库操作。 当我运行此代码时出现错误

function queryByContentAndCreatedBy($city,$min,$max){
    $sql = "SELECT id FROM users WHERE city=? LIMIT ?,? ";
    $sqlQuery = new SqlQuery($sql);
    $sqlQuery->setString($city);
    $sqlQuery->setNumber($min);
    $sqlQuery->setNumber($max);
    return $this->executeUpdate($sqlQuery);
} 

public static function executeUpdate($sqlQuery){
    $transaction = Transaction::getCurrentTransaction();
    if(!$transaction){
        $connection = new Connection();
    }else{
        $connection = $transaction->getConnection();
    }       
    $query = $sqlQuery->getQuery();
    $result = $connection->executeQuery($query);
    if(!$result){
        throw new Exception(mysql_error());
    }
    return mysql_affected_rows();       
}

Connection.php

public function executeQuery($sql){
    return mysql_query($sql, $this->connection);
}

然后出现错误:

You have an error in your SQL syntax ... near ('Pu\'m','d\'Artagnan','s\dsd') at line 1

此查询的类似错误

 $sql = "SELECT id FROM users WHERE city IN (?,?)";

在PDO中,这是一个解决方案:see details

$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false ); 

对于我的dao来说,什么是相同的解决方案?

2 个答案:

答案 0 :(得分:0)

你做错了。 来自链接问题的解决方案对你没有帮助。

如果您的“phpdao”没有setArray()方法,则必须手动创建查询。

  1. 创建一个类似于(?,?,?,?,?,?)的字符串,其中?s的数量等于数组成员的数量。
  2. 将此字符串添加到您的查询中
  3. 将数组成员绑定到循环中。

答案 1 :(得分:-1)

  1. 语法为LIMIT start, amount - 您将其用作LIMIT start, end
  2. 您正在使用$sqlQuery->setStrig - 这可能不对。
  3. $city是一个数组吗?在这种情况下,您可能希望改为使用WHERE city IN ?