Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中dao中的参数化查询问题_Php_Mysql - Fatal编程技术网

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

php中dao中的参数化查询问题,php,mysql,Php,Mysql,我正在使用用于数据库操作的。 当我运行此代码时,出现了一个错误 function queryByContentAndCreatedBy($city,$min,$max){ $sql = "SELECT id FROM users WHERE city=? LIMIT ?,? "; $sqlQuery = new SqlQuery($sql); $sqlQuery->setString($city); $sqlQuery->setNumber($min)

我正在使用用于数据库操作的。 当我运行此代码时,出现了一个错误

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

然后是一个错误:

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中,这是一种解决方案:

对于我的dao,什么是等效的解决方案

  • 语法是
    LIMIT start,amount
    -您将其用作
    LIMIT start,end
  • 您正在使用
    $sqlQuery->setStrig
    -这不可能是正确的
  • $city
    是数组吗?在这种情况下,您可能希望使用
    城市在哪里?
  • 你做错了。 而链接问题的解决方案对您没有帮助

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

  • 创建一个类似于
    (?,?,?,?,?,?,?)
    的字符串,其中?的数量等于数组的成员数量
  • 将此字符串添加到查询中
  • 在循环中绑定数组成员

  • 这是一个打字错误,请提供一个解决方案。@neel.1708:这里的大多数问题都是由打字错误引起的。下次要更小心:-)Tom van der Woerdt感谢您的回复,$end只包含金额,city是字符串“city name”,顺便说一句,问题是在有限制或有错误的情况下使用哪个查询。我只想知道如何设置ATTR\u EMULATE\u为此dao手动准备此参数。然后更仔细地问您的问题:-)无论如何,回答它:您使用的是
    mysql\u query()
    ,它没有准备好的语句。从技术上讲,它们已经被模拟过了,所以你想要的要么已经完成了,要么根本不可能完成。谢谢Col,但是这个dao中的所有设置函数都只清理用户输入,所以我也必须这么做,但是这个dao的另一个问题是它使用mysql\u escape\u字符串清理用户输入,我认为这是不推荐的,那么我应该也使用PDO吗?或者你能推荐其他工具吗?是的,这就是重点。您必须清理数组成员。在一个循环中。我相信PDO没事。注意,对于PDO,无论您选择哪种模式,都会遇到完全相同的问题:o$dbh->setAttribute(PDO::ATTR\u EMULATE\u PREPARES,false);这不是解决了你的问题吗?还有其他更好的DB操作工具吗?它解决了我的问题,但你的问题不同。您问题的解决方案已发布在我的答案-三项列表中。它适用于phpdao和PDO。事实上,这个问题是为你们所有人提出的,你们知道像PDO这样的PHPDB工具吗?我知道我可以用谷歌搜索它,但如果你们知道你们使用过的任何其他工具,或者你们知道哪些工具值得使用,请给我链接。
     $sql = "SELECT id FROM users WHERE city IN (?,?)";
    
    $dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );