关于php类和我的sql问题


About php classes and my sql problem

谢谢。我想让用户登录,并尝试以oop方式

这是loginPage.php

<html>
<body>
<?php require_once("connection.php");
$instance=new connection("527442_1","chi1234a","foodil_zxq_1");
if (isset($_POST['s'])) {
    $SecIns=new login($_POST['u'],$_POST['p']);
    echo $SecIns->enter();
}
?>
<form name="fm" method="POST" action="show.php">
User Name :<input type="text" name="u">
<br>
Password: <input type="password" name="p">
<br>
<input type="submit" name="s">
</form>
</body>
</html>

这是我使Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource 失败的oop代码

<?php
class connection
{var $user;
var $pass;
var $db;
function __construct($user,$pass,$db){
$this->user=$user;
$this->pass=$pass;
$this->db=$db;
}
function conn(){
$conn=mysql_connect('localhost' , $this->user , $this->pass) or die ("Can't connect server");
mysql_select_db($this->db,$conn) or die ("DB error");
}
}
class login extends connection
{
function __construct($id,$pwd)
{$this->id=$id;
$this->pwd=$pwd;
}
function enter()
{$this->query="SELECT * FROM test WHERE id='".$this->id."' AND pwd='". $this->pwd."';";
$result=mysql_query($this->query,$this->conn) or die ("Error:" . mysql_error());
if (mysql_num_rows($this->result)<1)
return "Not correct user";
else
return "Login success";
}
}
?>

问题出在function enter()。应该是格式问题吗??但我花了很长时间。谢谢

虽然您希望将组织添加到代码中是值得称赞的,但将方法添加到类中并不会自动使其成为OOP。我建议你先读一些基础知识,然后重新组织你的课程。

至于你的问题,

$result=mysql_query('$this->query','$this->conn') or die( ..
--------------------------^

您传递的那些变量被视为文字字符串,因为您引用了它们。您需要向它传递一个实际的查询和一个连接对象。只需去掉引号。

此外,我建议您研究参数化查询:http://php.net/manual/en/book.pdo.php

编辑

进一步查看您的代码,这些提示可能会改进您的代码

  • 对类使用大写名称。这使它们更容易阅读
  • 您将连接转移到其他类是正确的,但您的用法是错误的
  • 即使您已经从Connection类扩展了Login类,也不会实例化连接对象以在Login类中使用,即使您在代码中引用了它(例如-$this->conn(
  • 实例化您的连接,并将其作为其他类的参数传递。不要从连接中扩展它们。

    $conn=新连接($username,$pass,$host,$db(;$login=新登录名($conn(;$login->doLogin($username,$password(;

并且在您的连接中有一个query()方法,因此您可以从其他类中调用该方法。

$result=mysql_query('$this->query','$this->conn') or die ("Error:" . mysql_error());

这段代码不计算PHP存储的变量。如果你引用某个东西,PHP不会试图把它当作一个变量来解析。删除引号。

这样做之后,您的代码将在connection::conn()失败,因为没有函数mysql_conn。有mysql_connect。它采用不同顺序的参数(例如,服务器是第一个参数,而不是第三个参数(。

尝试:

{$query="SELECT * FROM test WHERE id='".$this->id."' AND '".$this->pwd".';";

您错过了一些东西;我根据所有答案集体写作

1-mysql_conn()不是您在function conn() {}中编写的函数
2-从$result = mysql_query('$this->query','$this->conn')中删除'
3-您在mysql语句中遗漏了一个参数

    $query="SELECT * FROM test WHERE id='$this->id' AND        '$this->pwd';";
                                                         ^ (here)

4-在$this->query而不是仅在$query 中分配查询

您没有将连接对象传递给登录对象,这就是您出现此错误的原因:警告:mysql_query((:提供的参数不是有效的mysql链接资源。从登录对象调用$db的位置,您使用登录类中的资源而不启动它们。。。在你设置它们之前,它们是不存在的。