调用成员函数 prepare()
Call to a member function 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;
}
?>
致命错误:调用成员函数 prepare() on null in
我不明白我是怎么得到这个错误的。我几乎尝试了所有遇到同样问题的方法。如果您有朋友可以帮助我,请写信。谢谢
PDO 模块激活,安装 mysqli 时出现严重错误。
发生这种情况的原因是 $data 为空。在此处准备语句时 ~>
$query = $pdo->prepare($data);
来自构造函数的数据是 null。因此,请仔细检查并确保在调用 fetch_data 的任何地方您传递的值不是 null.
编辑:
因为PDO为空。您的设置方式一定有问题,因为 global 参考应该让您可以访问 PDO.
以此为参考:http://www.w3schools.com/php/php_mysql_prepared_statements.asp
嗯,首先,错误是 $pdo(即使您使用的是全局范围)为空。在您的尝试中,您正在设置 $pdo 变量,但如果失败,则永远不会设置 $pdo。如果 $hata->getCode() 不是 return "1044" 或 "1049",线程永远不会死。
仔细检查您的连接字符串。你能从你的电脑上连接到它吗?我有点怀疑''密码。
致命错误:调用成员函数 prepare() on null
错误的解释如下:
$pdo->prepare($data);
只有当 $pdo
是具有该方法的 class 的对象时,您才能从 $pdo
调用方法。在这种情况下,$pdo
是 null,它不是对象的类型。 null 没有方法,因此尝试调用 null 上的任何方法都是致命错误。
这个问题的原因是,当您获得 PDO 连接时,您只检查错误代码 1044 和 1049。如果任何其他错误代码是导致异常的原因,那么您的代码不会调用 die()
,它继续到第二个代码块。
但是 $pdo
仍然没有设置为有效的数据库连接!
这就像您在 phone 上给某人打电话,但您的手机 phone 没有信号。但你还是开始和你的朋友说话?!?
如果catch()
块中的代码正在执行,则表示出错了,new PDO()
没有成功。您必须以一种或另一种方式在 catch()
块中调用 die()
。
要解决此问题,我会推荐以下内容。在您的 catch()
块中,确保在块末尾调用 die()
,无论错误代码是什么(下面的示例)。
我还建议您将异常消息保存到错误日志中。这是为了帮助您排除故障。不要在 HTML 输出中向用户显示错误,因为他们无论如何都不知道该错误的含义。但是您可以在 PHP 错误日志(通常是 Apache 错误日志)中查找它。
<?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()
并且不会尝试使用无效的 $pdo
.
<?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;
}
?>
致命错误:调用成员函数 prepare() on null in
我不明白我是怎么得到这个错误的。我几乎尝试了所有遇到同样问题的方法。如果您有朋友可以帮助我,请写信。谢谢
PDO 模块激活,安装 mysqli 时出现严重错误。
发生这种情况的原因是 $data 为空。在此处准备语句时 ~>
$query = $pdo->prepare($data);
来自构造函数的数据是 null。因此,请仔细检查并确保在调用 fetch_data 的任何地方您传递的值不是 null.
编辑:
因为PDO为空。您的设置方式一定有问题,因为 global 参考应该让您可以访问 PDO.
以此为参考:http://www.w3schools.com/php/php_mysql_prepared_statements.asp
嗯,首先,错误是 $pdo(即使您使用的是全局范围)为空。在您的尝试中,您正在设置 $pdo 变量,但如果失败,则永远不会设置 $pdo。如果 $hata->getCode() 不是 return "1044" 或 "1049",线程永远不会死。
仔细检查您的连接字符串。你能从你的电脑上连接到它吗?我有点怀疑''密码。
致命错误:调用成员函数 prepare() on null
错误的解释如下:
$pdo->prepare($data);
只有当 $pdo
是具有该方法的 class 的对象时,您才能从 $pdo
调用方法。在这种情况下,$pdo
是 null,它不是对象的类型。 null 没有方法,因此尝试调用 null 上的任何方法都是致命错误。
这个问题的原因是,当您获得 PDO 连接时,您只检查错误代码 1044 和 1049。如果任何其他错误代码是导致异常的原因,那么您的代码不会调用 die()
,它继续到第二个代码块。
但是 $pdo
仍然没有设置为有效的数据库连接!
这就像您在 phone 上给某人打电话,但您的手机 phone 没有信号。但你还是开始和你的朋友说话?!?
如果catch()
块中的代码正在执行,则表示出错了,new PDO()
没有成功。您必须以一种或另一种方式在 catch()
块中调用 die()
。
要解决此问题,我会推荐以下内容。在您的 catch()
块中,确保在块末尾调用 die()
,无论错误代码是什么(下面的示例)。
我还建议您将异常消息保存到错误日志中。这是为了帮助您排除故障。不要在 HTML 输出中向用户显示错误,因为他们无论如何都不知道该错误的含义。但是您可以在 PHP 错误日志(通常是 Apache 错误日志)中查找它。
<?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()
并且不会尝试使用无效的 $pdo
.