当前位置:  开发笔记 > 编程语言 > 正文

PHP PDO:SQL查询未返回预期结果

如何解决《PHPPDO:SQL查询未返回预期结果》经验,为你挑选了0个好方法。

我在PHP中有一个函数(见底部),它查询MySQL数据库.当我使用以下值时:

$ map => 1,

$ limit => 10,

$ from => 0,

$ to => CURRENT_TIMESTAMP

使用SQL语句:

SELECT user,
       scoreVal AS score,
       UNIX_TIMESTAMP(timestamp) AS timestamp 
  FROM Score 
 WHERE timestamp >= :from 
   AND timestamp <= :to 
   AND map = :map 
 ORDER BY scoreVal DESC, timestamp ASC 
 LIMIT :limit

在phpMyAdmin中,我得到以下结果:

phpMyAdmin结果

但是PHP PDO返回一个空数组.

我到目前为止尝试调试:

我已经用静态值而不是占位符替换了他准备的SQL查询 - 正确返回

分别尝试每个占位符,用经过测试的硬编码值替换其余的 - 不返回任何内容

我没有将变量传递给占位符,而是在execute(Array())部分传递固定常量. - 什么都不返回.

我在打开mySQL查询日志之后进一步发现,PHP客户端连接,但随后退出而不发送任何查询.

由此,我认为这是函数中占位符的一个问题,但是我一直无法找到他们失败的原因.这很可能发生在PHP端,因为MySQL没有错误抛出错误文件.

这是我正在使用的函数,传入的变量是:

$ map => 1,

$ limit => 10,

$ from => 0,

$ to => 0

功能:

/**
 * Gets the highscore list for the map in that timespan
 * @param  integer $map   Id of map for which to fetch the highscore
 * @param  integer $limit Maximum no. of records to fetch
 * @param  integer $from  Timestamp from when to find rank
 * @param  integer $to    Timestamp up to when to find rank
 * @return array   Array of highscores arranged by rank for the map in the format [{"user"=>$user,"score"=>score,"timestamp" => timestamp}]
 */
function get_highscore_list($map,$limit,$from,$to){
    $sql = "SELECT user,scoreVal AS score,UNIX_TIMESTAMP(timestamp) AS timestamp FROM Score WHERE timestamp >= :from AND timestamp <= :to AND map = :map ORDER BY scoreVal DESC, timestamp ASC LIMIT :limit";
    if ($to==intval(0)){
        $max =1;
        $sql = str_replace(":to","NOW()",$sql,$max);
    }
    try{
    $conn = request_connection();
    $stmt = $conn->prepare($sql);
    $stmt->execute(array(':map'=>$map,':from'=>$from,':limit'=>$limit));
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    }catch(PDOException $e){
        $_POST["exception"]=$e;
        continue;
    }
    return $result;
}

EDITS


MySQL表的格式:

MySQL表格式


我已经尝试输出$ conn-> errorInfo();但是由于没有抛出错误,我得到一个值数组:[00000,null,null]


request_connection函数只返回此函数的结果,它适用于我的所有其他语句.

/**
 * Creates a new PDO connection to the database specified in the configuration file
 * @author Ignacy Debicki
 * @return PDO A new open PDO connection to the database
 */
function create_connection(){
    try {
        $config = parse_ini_file('caDB.ini');
        $conn = new PDO('mysql' . ':host=' . $config['dbHost'] . ';dbname=' . $config['db'],$config['dbPHPUser'], $config['dbPHPPass']);
        date_default_timezone_set($config['dbTimezone']);
        return $conn;
    } catch(PDOException $e){
        throw new Exception("Failed to initiate connection",102,$e);
    }   
}

谢谢

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有