我想创建一个函数来检查数据库中是否已存在用户。该函数存储在名为 checks 的 php 文件中.php
并且必须返回一个值。
require 'database.php';
function exist_user( $username){
$sth = $conn->prepare('SELECT email FROM users WHERE email = :$username');
$sth->bindParam(':email', $username);
$sth->execute();
return ($sth->rowCount() == 0) ? true : false;
}
我的数据库.php文件:
$server = 'localhost';
$username = 'root';
$password = '';
$database = 'auth';
try {
$conn = new PDO("mysql:host=$server;dbname=$database;", $username,
$password);
} catch (PDOException $e) {
die( "Connection failed: " . $e->getMessage());
}
我在另一个名为 register.php
的 php 文件中调用 exist_user():
require 'database.php';
require 'checks.php';
if (!exist_user($username)) {
//insert in the db
else{
//echo some message error
}
错误出现在这个句子上:$sth=$con-
我在< code>checks.php文件中试过:
$conn
对象是一个不存在于函数作用域中的全局对象,全局对象可以作为参数
/自变量
或通过使用关键字global
传递给函数。
function exist_user($username, $conn){
$sth = $conn->prepare('SELECT email FROM users WHERE email = :$username');
$sth->bindParam(':email', $username);
$sth->execute();
return ($sth->rowCount() == 0) ? true : false;
}
艺术
function exist_user($username){
global $conn;
$sth = $conn->prepare('SELECT email FROM users WHERE email = :$username');
$sth->bindParam(':email', $username);
$sth->execute();
return ($sth->rowCount() == 0) ? true : false;
}
我建议使用选项1,它更容易阅读,并且全球
关键字令人憎恶(个人意见)。
你有几个错误。
首先:$conn
在user_exist
函数的范围内不存在;您需要将其作为参数传入,或使用global
关键字访问它。
function exist_user($conn, $username){
$sth = $conn->prepare('SELECT email FROM users WHERE email = :$username');
...
}
...或者...
function exist_user($username){
global $conn;
$sth = $conn->prepare('SELECT email FROM users WHERE email = :$username');
...
}
其次;您的参数绑定有些破损:
$sth = $conn->prepare('SELECT email FROM users WHERE email = :$username');
$sth->bindParam(':email', $username);
这将尝试从字面上绑定一个名为$username
的参数-您可能只需要: username
。
然后,您绑定的参数不是< code>:email,而是< code>:username,即
$sth = $conn->prepare('SELECT email FROM users WHERE email = :username');
$sth->bindParam(':username', $username);
最后: - 您可能会侥幸使用返回 ($sth-
PDOStatement::rowCount()返回受相应PDOStatement对象执行的最后一条DELETE、INSERT或UPDATE语句影响的行数。
如果关联的PDO语句执行的最后一个SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并非所有数据库都能保证这种行为,便携式应用程序也不应依赖这种行为。
但是,如果您只需要确定用户是否存在,您可以使用以下内容:
function exist_user($conn, $username) {
$sth = $conn->prepare('SELECT 1 AS user_exists FROM users WHERE email = :username');
$sth->bindParam(':username', $username);
if($sth->execute()) {
$result = $stc->fetch(PDO::FETCH_ASSOC);
return !empty($result['user_exists']);
}
else {
return false;
}
}
我想基本验证,如果用户是管理员,然后请求下一步,否则重定向到主页 User.php: 最后一个函数是 一个dmin.php(这是中间件): routes.php: 我得到以下错误: Admin.php第21行中的FatalErrorException: 调用null上的成员函数isAdmin() 我还添加了
函数attach()有问题。我已经创建了3个表。1表用于添加电影。表2适用于电影类别。3表是电影ID和类别ID的集合。多对多的组合。 当我想添加一个新的视频类别从表格这我有错误- 视频控制器。php- 视频php模型 类别php模型 User.php模型(也许你需要一个User.php模型解决问题) 迁移-创建\u类别\u视频\u表。php 迁移-创建类别表。php 移民-create_video
问题内容: 此代码 出现错误 : 致命错误:在第42行的C:\ Users \ fel \ VertrigoServ \ www \ login \ validation.php中的非对象上调用成员函数prepare() 码: 可能的原因是什么? 另一个问题 是什么?抱歉,我是pdo的新手 问题答案: 未定义。您没有在函数内部声明它,也没有将其作为参数传递。 您需要将其传递(好),或在全局名称空间
问题内容: 我正在尝试在此准备好的语句中绑定变量,但我一直收到错误: 调用该函数,并将变量传递给它。当我更改函数以仅回显变量时,该变量会在页面上正常打印,但是如果我尝试在此处绑定它,则会收到错误。有人可以帮忙吗? 我知道函数没有完全写在这里,但这不应该是一个问题。我不明白为什么我会收到此错误。 问题答案: 正如错误消息所说,这似乎不是一个对象。尝试在您的prepare- call之后使用来调试它。
我使用Laravel 8与Livewire。 我创建了这个来显示项目列表,用户也可以应用过滤器。在加载数据时,每页显示10条记录。然而,当我尝试单击下一页或特定的页码时,我得到错误调用成员函数链接()数组... 我也在使用存储库,它被注入了livewire组件。
最近在review代码的时候发现,使用了空指针调用成员函数,并且成员函数内部有使用到成员变量,居然没有出错。很是奇怪,就用一篇博客把关于空指针调用成员函数相关的内容总结起来。 空指针调用成员函数 调用普通成员函数 如果空指针调用普通成员函数,看该函数体中是否使用到了this指针(是否访问非静态成员变量)。如果使用到了this指针,程序会崩溃;如果没有使用到this指针,程序不会崩溃。当然,如果访问