当前位置: 首页 > 面试题库 >

致命错误在null上调用成员函数prepare()

瞿博学
2023-03-14
问题内容

我正在尝试检查注册中是否已使用电子邮件。当我在学校工作时,它运行良好,但现在突然显示出一个错误:

致命错误:在null上调用成员函数prepare()

我用这个包括

define("dbserver", "localhost");
define("dbuser", "user");
define("dbpass", "");
define("dbname", "user");


$db = new PDO(
"mysql:host=" .dbserver. ";dbname=" .dbname,dbuser,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
) );

在这里

session_start();
include "DBjoin.php";
if(isset($_POST["email"])) {
  $_SESSION['email'] = $_POST["email"];
  }   
if(isset($_POST["nick"])) {
  $_SESSION['nick'] = $_POST["nick"];         
}    
if(isset($_POST["pass"])) {
  $_SESSION['pass'] = $_POST["pass"];
  $_SESSION['pass'] = base64_encode($_SESSION['pass']);    
}
$sthandler = $db->prepare("SELECT Email FROM Registrace WHERE Email =     :email");
$sthandler->bindParam(':email', $_SESSION['email']);
$sthandler->execute();               
if(filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL)) {
if($sthandler->rowCount() > 0){
      echo "Email is used";}

问题答案:

编辑:( 我想通了)。

我终于弄清楚了为什么您的代码无法正常工作,而我原来的答案已不再适用,我已将其剔除掉。

连接不起作用的原因是因为您dbpass从连接参数中省略了常量。

$db = new PDO(
"mysql:host=" .dbserver. ";dbname=" .dbname,dbuser,dbpass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
) );
  • 即使您可能没有设置密码,也仍然需要将其作为参数的一部分。

  • http://php.net/manual/zh/ref.pdo-mysql.connection.php

原始答案,不再适用。(请参见上面的编辑)。

TBH,在巨大的努力中,我无法重现该错误。

然而; 修改之后,发现PDO( 至少是我服务器上的那个 )不允许将
常量
用作DSN中的前两个参数。

旁注: 如果您说的话在您的学校有用,那么可能有一个我不知道的设置。

但是,您可以将变量分配给常量,然后在DSN中使用这些变量。

$servername = "localhost";
$dbname = "user";

define("dbuser", "user");
define("dbpass", "");

$dsn = "mysql:host=$servername;dbname=$dbname";

$username = dbuser; // variable equals constant
$password = dbpass; // variable equals constant

$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
);

$db = new PDO($dsn, $username, $password, $options);

有关PDO连接的更多信息,请访问:

  • http://php.net/manual/zh/ref.pdo-mysql.connection.php

错误报告
添加到文件顶部,这将有助于发现错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注: 错误报告仅应在登台进行,而不应在生产过程中进行。



 类似资料:
  • 问题内容: 我正在尝试访问类别及其内容的列表。我有一堂课叫做分类。我不断收到此错误。奇怪的是,到目前为止,我已经在另外两个地方使用了相同的完全相同的代码,没有任何问题。我在这里所做的只是重用代码并更改所有变量。 这是我班上的代码: 这是我尝试调用的代码: 问题答案: 看来您的变量未初始化。在您上传的代码中,我看不到它的初始化位置。 确保在调用类方法之前在中创建了一个新的PDO对象。(由于应在Cat

  • 代码: 代码2: 错误: 注意:未定义变量:第8行的connect in/home/user/domains/site.com/public_html/inc/nav/function-nav.php致命错误:在第8行的/home/designpr/domains/shrg.ir/public_html/inc/nav/function-nav.php中调用null上的成员函数prepare()

  • 问题内容: 我不确定这里出了什么问题。我只是在线上学习教程,并且弹出了这些错误。 我收到以下错误 错误 码 问题答案: 首先,您在函数外声明了$ db。如果要在函数内部使用它,则应将其放在函数代码的开头: 我猜,当你写的时候: 您真正想要的是:

  • 我试图了解PDO的来龙去脉,但我却走进了这堵砖墙。 我目前的PDO课程如下: 我有其余的函数,但对于这个错误,我认为没有必要向您展示其余的函数。 然后我这样调用函数: 我得到了以下错误:致命错误:在null上调用成员函数准备(),当我调用准备函数时会发生这种情况。知道为什么会发生这种情况以及我如何解决这个问题吗?

  • 试图创建一个登录屏幕,我得到一个错误 致命错误:在第19行的C:\xampp\htdocs\login\class\Mysql.php中,对非对象调用成员函数准备() Constants.php

  • 我一直被这个错误困扰,请帮助我这是我的PHP代码致命错误:调用成员函数bind_param()