在非对象上调用成员函数bindValue()。 PHP版本有何不同?

时间:2015-12-13 03:36:22

标签: php mysql pdo

嗯,这段代码在PHP 5.6.15下运行得非常好,但是在我使用PHP 5.5.30的Web服务器上,它在第19行给出了错误。

<?php
//Classe usada para enviar informações do banco de dados ou do servidor SRCDS.
class sendInfo{

  //Função usada para arrumar os tempos irregulares de determinado mapa no banco de dados do ckSurf.
  function fixMapRecords($map, $steamid){
    try {
      $db = dbConnection::getConnection();
      //Pega o tempo do usuário chave.
      $stmt = $db->prepare("SELECT runtimepro FROM ck_playertimes WHERE mapname=:targetmap AND steamid=:targetsteamid;");
      $stmt->bindValue(':targetmap', $map, PDO::PARAM_STR);
      $stmt->bindValue(':targetsteamid', $steamid, PDO::PARAM_STR);
      $stmt->execute();
      $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
      //Remove todo tempo que é menor do que o do usuário chave.
      foreach ($result as $pro) {
        $protime = $pro['runtimepro'] - 0.0001;
        $stmt2 = $db->prepare("DELETE FROM ck_playertimes WHERE mapname =:targetmap AND runtimepro<:targettime");
        $stmt2->bindValue(':targetmap', $map, PDO::PARAM_STR);
        $stmt2->bindValue(':targettime', $protime, PDO::PARAM_STR);
        $stmt2->execute();
        $result2 = $stmt2->fetchAll(PDO::FETCH_ASSOC);
      }
      //Deu tudo certo e os tempos foram removidos, redirecione para a página de sucesso.
      header('Location: ../../messages/success.php');
    }catch(PDOException $ex){
      //Ocorreu algo de errado, redirecione para a página de erro.
      header('Location: ../../messages/error.php');
    }
  }
}
?>

这是我的数据库连接类:

class dbConnection{
    protected static $db;

    private function __construct() {
      try {
        self::$db = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_DATABASE.';charset=utf8', DB_USER, DB_PASSWORD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
        self::$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      } catch (PDOException $e) {
        header('Location: messages/error.php');
      }
    }

    public static function getConnection() {
      if (!self::$db) {
        new dbConnection();
      }
      return self::$db;
    }
  }

所以我一直试图找出过去3个小时的问题,完全不知道。

*我试图看到任何异常,但它只是在第一个代码块的第19行死掉,所以没有消息。

**在第二个代码块上模拟准备好的声明是出于某些原因,不让我读取异常,删除它并且可以赞美太阳。

1 个答案:

答案 0 :(得分:0)

好的,我忘记向我的数据库用户授予DELETE权限,问题已修复。