【问题标题】:mysql_query error on db classdb类上的mysql_query错误
【发布时间】:2012-08-23 06:33:02
【问题描述】:

我正在尝试编写简单的用户注册页面并使用与下面相同的简单 DBCONNECTOR 类,当我尝试将用户发送到数据库时,我得到 mysql_query() 错误。这是我的 php 代码和类,请帮我解决问题

这是我的 dbconnector 类:

<?php
    require_once 'UConfig.inf.php';
    class udbcl extends USettings{
        var $link;
        var $myquery;
        function UDbconnect(){
            $DBinfo=USettings::GSettings();
            $DBhost=$DBinfo['UDbhost'];
            $DBname=$DBinfo['UDbname'];
            $DBusername=$DBinfo['UDbusername'];
            $DBpassword=$DBinfo['UDbpassword'];
            $this->link=mysql_connect($DBhost,$DBusername,$DBpassword);
            mysql_select_db($DBname);

        }
      function UQuery($myquery){
          $this->link=$myquery;
          return mysql_query($myquery,  $this->link);

      }
      function UFetch($result){
         return mysql_fetch_array($result);
      }
      function UDbclose(){
          mysql_close($this->link);

      }
    }

?>

这是我的 register.php 页面:

<?php
require_once ('UConfig/UDbconnector.php');
$myinfoadd = new udbcl();
if (isset($_POST['username'])) {
    $myq = "INSERT INTO userinfo(username,password,email,telphon) VALUES('$_POST[username]','$_POST[password]','$_POST[email]','$_POST[telnumber]')";
    $myinfoadd->UQuery($myq);
    $myinfoadd->UDbclose();
    echo "You registration is Success!";
    sleep(3);
    header('Location:index.php');
} else {
    print <<<hldoc
    <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>U S R R</title></head><body><form method="POST" action="register.php" ><b>User Name:</b> <input type="text" name="username" /><br/><b>User Password:</b><input type="password" name="password" /><br/><b>User Email:</b><input type="email" name="email" /><br/><b>User Tel:</b><input type="telnumber" name="telnumber" /><br/><input type ="submit" name="submit" value="Register"/></form></body></html>
hldoc;
}
?>

当我尝试注册用户时,出现如下错误:

警告:mysql_query():提供的参数不是第 18 行 C:\xampp\htdocs\uzu\UConfig\UDbconnector.php 中的有效 MySQL-Link 资源

警告:mysql_close():提供的参数不是第 25 行 C:\xampp\htdocs\uzu\UConfig\UDbconnector.php 中的有效 MySQL-Link 资源

您注册成功!

警告:无法修改标头信息 - 标头已由(输出开始于 C:\xampp\htdocs\uzu\UConfig\UDbconnector.php:18)在 C:\xampp\htdocs\uzu\register.php 在线发送10

【问题讨论】:

  • 那么你在哪里打电话给UDbconnect?为什么要将类变量$this-&gt;link(资源)重置为$myquery(字符串),从而在每次调用UQuery 时覆盖其原始值?
  • 这可能无助于回答您的问题,但您应该停止使用mysql_* 函数。它们正在被弃用。请改用PDO(PHP 5.1 起支持)或mysqli(PHP 4.1 起支持)。如果您不确定要使用哪一个,read this article.
  • 您将$this-&gt;link 设置为您传递的查询,这是一个字符串。

标签: php mysql


【解决方案1】:
function UQuery($myquery){
    $this->link=$myquery;
    return mysql_query($myquery,  $this->link);
}

上面的函数相当于:

function UQuery($myquery){
    $this->link=$myquery;
    return mysql_query($myquery,  $myquery);
}

不要重新分配$this-&gt;link,你应该没问题。

更新

我还注意到您从未初始化链接。您应该在类构造函数中执行此操作,或者将其作为参数传递给构造函数

class udbcl extends USettings{
    var $link;
    var $myquery;

    public function __construct($dbLink = null) {
        if (is_null($dbLink)) {
            $dbLink = $this->UDbconnect();
        }
        $this->link = $dbLink;
    } 

    private function UDbconnect(){
        $DBinfo=USettings::GSettings();
        $DBhost=$DBinfo['UDbhost'];
        $DBname=$DBinfo['UDbname'];
        $DBusername=$DBinfo['UDbusername'];
        $DBpassword=$DBinfo['UDbpassword'];
        $this->link=mysql_connect($DBhost,$DBusername,$DBpassword);
        mysql_select_db($DBname);
    }
    .
    .
    .
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2012-11-30
    • 2021-05-20
    • 2014-05-12
    相关资源
    最近更新 更多