无法建立到服务器的链接

时间:2011-05-11 01:02:47

标签: php database

一个非常简单的插入功能,但是。它给出了一些令人讨厌的错误......

喜欢:

Warning: mysql_query(): Access denied for user '***.'@'***.one.com' (using password: NO) in /customers/***.be/***.be/httpd.www/belastingen/classes/btw.php on line 24 Warning: mysql_query(): A link to the server could not be established in /customers/***.be/***.be/httpd.www/belastingen/classes/btw.php on line 24

这是代码:

<?php

    if(isset($_POST['submit'])){

    $naam = $_POST['name'];
    $email = $_POST['email'];
    $kind1 = $_POST['kind1'];
    $kind2 = $_POST['kind2'];
    $kind3 = $_POST['kind3'];
    $kind4 = $_POST['kind4'];
    $kind5 = $_POST['kind5'];
    $captcha = $_POST['captcha'];

        if ($captcha == 2){
            if (!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['kind1'])) {
                    $insert = "INSERT INTO belastingen (ouder, email, kind1, kind2, kind3, kind4, kind5) VALUES (
                            '".$naam."',
                            '".$email."',
                            '".$kind1."',
                            '".$kind2."',
                            '".$kind3."',
                            '".$kind4."',
                            '".$kind5."')";
                if (!mysql_query($insert)) {
                    echo "<div class=\"feedback\">query invoeren faalt</div>";
                } else { 
                    echo "<div class=\"feedback\">Uw registratie werd goed geregistreerd</div>";
                }


                }    else {
                echo "<div class=\"feedback\">falen, niveau 2</div>";
            }
        } else {
            echo "<div class=\"feedback\">captcha probleem</div>";
        }
    }   
?>

不要担心MySQL注入。我们说话时添加。 有没有想过这个错误? 是的,我确定连接到数据库的数据是正确的。

更新1 这是我的inc.php - 文件,包含在index.php文件之上。

<?php
  define('MYSQL_HOST',  '***.be.mysql');
  define('MYSQL_DB',    '***');
  define('MYSQL_USER',  '***');
  define('MYSQL_PASSW', '***');

  require_once 'classes/dbconnections.php';
  require_once 'classes/btw.php';
  $_DB = new DBConnection(MYSQL_HOST, MYSQL_DB, MYSQL_USER, MYSQL_PASSW);
?>

更新2 这是我的dbconnections.php - 文件

<?php

class DBConnection {

  public  $host;
  public  $db;
  public  $user;
  public  $password;

  private $_connection;

  public function __construct($host = null, $db = null, $user = null, $password = null) {
    $this->host     = $host;
    $this->db       = $db;
    $this->user     = $user;
    $this->password = $password;
    $this->connect();
  }

  private function connect(){
    $this->_connection = mysql_connect($this->host, $this->user, $this->password);
    if(!$this->_connection) {
      die("An error occured---- while connecting to the database: ".mysql_errno()." - ".mysql_error());
    } else{
      $selected = mysql_select_db($this->db, $this->_connection);
      if(!$selected) {
        die("An error occured while connecting to the database: ".mysql_errno()." - ".mysql_error());
      }
    } 
  }

  public function listing($sql) {
    $result = mysql_query($sql, $this->_connection);
    while($row=mysql_fetch_array($result)) {
      $return[] = $row;
    }
    return $return;
  }

  public function select($sql) {
    $result = mysql_query($sql, $this->_connection);
    return mysql_fetch_array($result);
  }

  public function insert($sql) {
    mysql_query($sql, $this->_connection);
    return mysql_affected_rows($this->_connection);
  }

  public function delete($sql) {
    mysql_query($sql, $this->_connection);
    return mysql_affected_rows($this->_connection);
  }

  public function escape($value) {
    return mysql_real_escape_string($value);
  }

}

?>

更新3
我在更换下面提到的错误时得到的错误

Notice: Undefined variable: _DB in /customers/***/***/httpd.www/belastingen/classes/btw.php on line 13 Fatal error: Call to a member function insert() on a non-object in /customers/***/***/httpd.www/belastingen/classes/btw.php on line 13

3 个答案:

答案 0 :(得分:5)

根据我们在你的问题评论中的讨论,尝试改变一下,以便在btw.php中需要inc.php; index.php中需要btw.php而不是inc.php; inc.php中不需要'btw.php`。从阅读php.net/manual/en/function.include.php,我认为这可能与范围有关。

编辑:

首先,您的设置创建了一个自定义数据库对象类(DBConnection),用于与数据库连接并执行查询。当您单独使用mysql_query时,它没有用于执行查询的数据库连接标识符,因为DBConnection对象在对象方法中抽象了该功能。这就是您需要使用if (!$_DB->insert($insert))

的原因

其次,我并非100%对此,但本质上核心问题似乎与btw.php中的代码有关,而不是“看到”数据库设置代码。这可能是因为两件事。首先,在需要$_DB代码之后,btw.php变量被定义为,因此,当PHP解释器解析btw.php时,$_DB还没有定义。如果需求和数据库对象定义很重要的顺序。其次,这是我有点不确定的地方,但我认为在btw.php(其中inc.php已定义)中需要$_DB而不是要求时,存在可变范围/访问问题btw.php内的数据库设置。换句话说,您拥有使用定义它的脚本所需的数据库对象的代码,而不是使用它的代码中所需的数据库设置脚本(包括数据库对象声明)。

我希望这是有道理的,如果它仍然令人困惑,请告诉我。我倾向于简明扼要地解释事情。

答案 1 :(得分:1)

您似乎没有使用DBConnection类进行查询。当然,在该类中进行连接。通过直接调用mysql_query(),PHP在使用localhost,Web服务器帐户并且在尝试查询时没有密码。所以你需要做一些像

这样的事情
if($_DB->insert($insert) > 0)
{
     ...

答案 2 :(得分:-2)

只需确保sql查询正确 当与此操作相关的文件中的mixup mixup mysql和mysql query混合时,可能会发生此错误,或者可能是为mysqliquery提供的参数的错误