Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要在PHP函数中使用类的帮助_Php_Mysql_Pdo_Mysqli - Fatal编程技术网

我需要在PHP函数中使用类的帮助

我需要在PHP函数中使用类的帮助,php,mysql,pdo,mysqli,Php,Mysql,Pdo,Mysqli,我正在尝试将我所有的mysqli转换为PDO,但是我对PDO非常熟悉,我的问题可能是基本的。我在转换的第一个问题上遇到了问题 这是我的设置。在我的login.php中,我调用如下函数: login.php $user=尝试登录($username,$password); “我的包含功能”页面加载以下内容: funcs.php 函数尝试\u登录($username,$password){ $user=通过用户名($username)查找用户; 如果($user){ 如果(密码检查($passw

我正在尝试将我所有的mysqli转换为PDO,但是我对PDO非常熟悉,我的问题可能是基本的。我在转换的第一个问题上遇到了问题

这是我的设置。在我的login.php中,我调用如下函数:

login.php

$user=尝试登录($username,$password);
“我的包含功能”页面加载以下内容:

funcs.php

函数尝试\u登录($username,$password){
$user=通过用户名($username)查找用户;
如果($user){
如果(密码检查($password,$user[“salt”],$user[“password”])){
...
}
它指的是给出所有错误的函数:

函数通过用户名($username)查找用户{
$db=新数据库();
$db->dbc();
$sql=“从用户名=:usr”的用户中选择*;
$stmt=$db->prepare($sql);//***这是第157行
$stmt->bindParam('usr',$username,PDO::PARAM_STR);
$stmt->execute();
$result=$stmt->fetch(PDO::fetch_ASSOC);
返回$result;
}
和我的班级一起开始:

db_connection.php

类数据库
{
私人$dbc;
公共函数构造()
{
试一试{
$db_host='';//主机名
$db_name='';//数据库名称
$db_user='';//用户名
$db_pass='';//密码
$dbc=new-PDO('mysql:host='.$db_-host.';dbname='.$db_-name,$db_-user,$db_-pass);
$dbc->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
}
捕获(PDO异常$err){
$err->getMessage();
}
}
公共函数dbc()
{
返回$this->dbc;
}
}
数据库可以连接。我只是不想在我的函数中有全局变量,但我觉得这个错误意味着我需要在我的函数页面中有一些全局变量。下面是错误:

致命错误:在第157行的funcs.php中调用未定义的方法Database::prepare()
我的问题是,我这样做是否完全错误?我应该把我所有的函数也放在类中吗?还是我只是缺少了一些简单的东西?同样,我只想在函数中使用PDO,避免使用全局函数

$db->dbc();
这没有效果,因为您没有将返回值存储在变量中,然后使用此变量调用prepare()。
此外,您没有将PDO对象存储在成员变量中,而是存储在构造函数方法->中的局部变量中。当构造函数存在时,该方法->不在范围内。
由于您的数据库类除了将一些参数传递给PDO的构造函数之外什么都不做,因此——无意冒犯——毫无用处;而且该类“不做”其名称所暗示的事情。我建议在这里使用

这没有效果,因为您没有将返回值存储在变量中,然后使用此变量调用prepare()。
此外,您没有将PDO对象存储在成员变量中,而是存储在构造函数方法->中的局部变量中。当构造函数存在时,该方法->不在范围内。

由于您的数据库类除了将一些参数传递给PDO的构造函数之外什么都不做,因此——无意冒犯——毫无用处;而且该类“不做”顾名思义。我建议在这里使用。

where is:usr?,它是您想要的变量,如$db$dbc或类似的,而不是->into数据库,一个类。您的
数据库中有一个$db,$dbc::\u构造()
您将设置为
$dbc
而不是
$this->dbc
。然后在
函数中按用户名($username)查找用户(
您需要将
$db->dbc();
更改为
$db=$db->dbc()
@Sean成功了。但现在我需要处理VolkerK的建议。我想我可能做得有点错。usr?在哪里,它是你想要的变量,比如$db$dbc之类,而不是->进入数据库,一个类。你的
数据库中有$db,$dbc,有点搞砸了::\u construct()
您将设置为
$dbc
而不是
$this->dbc
。然后在
函数中按用户名($username)查找用户(
您需要将
$db->dbc();
更改为
$db=$db->dbc()
@Sean成功了。但是现在我需要处理VolkerK的建议。我想我可能做错了。我做了Sean上面提到的两个更改,它成功了,这也是你在这里提到的一部分。但是现在我需要阅读你提到的链接。我觉得我从一开始就做错了。我做了Sean m上面提到过,它起了作用,这是你在这里提到的内容的一部分。但是现在我需要仔细阅读你提到的链接。我觉得我从一开始就做错了。