调用成员函数prepare()

时间:2016-08-12 01:40:56

标签: php mysql mysqli pdo prepare

<?php
date_default_timezone_set('Europe/Istanbul');
try{
$db_host = 'localhost';
$db_name = 'db_name';
$db_kadi = 'root';
$db_sifre = '';

$pdo = new PDO("mysql:host=".$db_host."; dbname=".$db_name, $db_kadi, $db_sifre, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}catch(PDOException $hata){
    if($hata->getCode() == "1044"){
        die("<h4>Sistem Bağlantı Hatası</h4><p>Sistem bağlantısı yok !</p>");
    }else if($hata->getCode() == "1049"){
        die("<h4>Database Sistem Hatası</h4><p>Database bağlantısı yok !</p>");
    }
}

?>

<?php
        public function fetch_data($data){
        global $pdo;
        $query = $pdo->prepare($data);
        $query->closeCursor();
        $query->execute();
        return $query->fetch(PDO::FETCH_ASSOC);
        $query->null;
    }
?>

致命错误:在 中调用null上的成员函数prepare()  我不明白我是如何得到这个错误的。我几乎尝试了所有遇到同样问题的东西。如果你有朋友帮我这个请写。谢谢

 PDO模块处于活动状态,安装了mysqli一个强烈的错误。

3 个答案:

答案 0 :(得分:0)

发生这种情况的原因是$ data为null。在这里准备声明时~~>

$query = $pdo->prepare($data);

构造函数中的数据是 null 。因此,请确保调用fetch_data,确保您传递的值不是 null

编辑:

这是因为PDO为空。必须有一些关于如何设置的内容,因为 全局 引用应该允许您访问 PDO

将此作为参考:http://www.w3schools.com/php/php_mysql_prepared_statements.asp

答案 1 :(得分:0)

好吧,首先,错误是$ pdo(即使你使用全局范围)是null。在您的尝试中,您正在设置$ pdo变量,但如果失败,则永远不会设置$ pdo。如果$ hata-&gt; getCode()没有返回“1044”或“1049”,则线程永远不会死亡。

仔细检查您的连接字符串。你能从PC上连接它吗?我有点怀疑''密码。

答案 2 :(得分:0)

致命错误:在null

上调用成员函数prepare()

以下是对该错误的解释:

$pdo->prepare($data);

只有当$pdo是具有该方法的类的对象时,才能从$pdo调用方法。在这种情况下,$pdo null ,这不是任何类型的对象。 null没有方法,因此尝试在null上调用任何方法都是致命的错误。

此问题的原因是当您获得PDO连接时,您只检查错误代码1044和1049.如果任何其他错误代码是异常的原因,那么您的代码不会调用{{ 1}},它进入第二个代码块。

但是die()仍然没有设置为有效的数据库连接!

如果你打电话给某人,但你的手机没有信号就好了。但是你还是开始跟你的朋友说话了?!?

如果$pdo块中的代码正在执行,则表示出现了问题,catch()未成功。您必须以new PDO()块的方式拨打die()

要解决这个问题,我建议如下。在catch()块中,请确保在块的末尾调用catch(),无论错误代码是什么(例如下面的代码)。

我还建议您将异常消息保存到错误日志中。这是为了帮助您排除故障。不要在HTML输出中向用户显示错误,因为他们无论如何都不知道错误的含义。但您可以在PHP错误日志中查找它(通常是您的Apache错误日志)。

die()

执行此操作后,您可以保证<?php date_default_timezone_set('Europe/Istanbul'); try{ $db_host = 'localhost'; $db_name = 'db_name'; $db_kadi = 'root'; $db_sifre = ''; $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_kadi, $db_sifre, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); } catch (PDOException $hata) { error_log($hata->getMessage()); // log the error! if ($hata->getCode() == "1044") { die("<h4>Sistem Bağlantı Hatası</h4><p>Sistem bağlantısı yok !</p>"); } else if ($hata->getCode() == "1049") { die("<h4>Database Sistem Hatası</h4><p>Database bağlantısı yok !</p>"); } // make sure to call die() if any other error code occurs! die("<h4>Database Sistem Hatası</h4><p>Veritabanı yöneticisine başvurun !</p>" } ?> 有效,或者代码已调用$pdo,并且不会尝试使用无效的die()