<?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一个强烈的错误。
答案 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()
。