致命错误:在第6行的C:\ xampp \ htdocs \ af \ functions \ indexdatasummary.php中调用null上的成员函数prepare()
dbconnect.php
global $dbh;
//Server Variables========-------------->
$af_host="localhost";
$af_root="root";
$af_password="";
//Database Variables========------------>
$af_cbms_database="af_cbms";
try
{
$dbh = new PDO("mysql:host=$af_host", $af_root, $af_password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$af_cbms_database = "`" . str_replace("`", "``", $af_cbms_database) . "`";
$dbh->query("CREATE DATABASE IF NOT EXISTS $af_database");
$dbh->query("SET CHARACTER SET utf8");
$dbh->query("USE $af_database");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
我使用的上述代码几乎适用于所有页面,但在此页面中出现错误。我调用它的方式与另一个文件的方式相同,这是唯一返回错误的页面。
indexsummary.php
global $dbh;
require_once '../functions/dbconnect.php';
$stmt = $dbh->prepare("SELECT * FROM `city_tbl`");
$stmt->execute();
很快......
您认为导致此错误的是什么?任何帮助!
答案 0 :(得分:1)
1)创建连接和创建数据库时出现问题。
Cuz你定义:
$af_cbms_database="af_cbms";
然后你打电话:
$dbh->query("CREATE DATABASE IF NOT EXISTS $af_database");
所以你的代码在哪里定义了$af_database
变量?
2)这样做太不专业了(看起来你是编程的新手):
$af_cbms_database = "`" . str_replace("`", "``", $af_cbms_database) . "`";
你已经定义了你的变量,然后替换它,很有趣,就像你不相信自己那个你定义变量? (:
或者你不能这样做? :
$dbh->query("CREATE DATABASE IF NOT EXISTS `".$af_cbms_database."`");
$dbh->query("USE `".$af_cbms_database."`");
3)不要使用$af_
这样的变量过多地使代码变得复杂,要像dbconnect.php
的固定代码那样简单:
<?php
global $dbh;
$host = "localhost";
$user = "root";
$password = "";
$db_name = "af_cbms";
try {
$dbh = new PDO("mysql:host=$host", $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->query("CREATE DATABASE IF NOT EXISTS ".$db_name);
$dbh->query("SET CHARACTER SET utf8");
$dbh->query("USE ".$db_name);
}
catch(PDOException $e) {
die($e->getMessage());
}
4)奖励:不要使用global $dbh
,因为可能会发生某些过程,某些代码可以替换$dbh
变量。使用global
变量也不流行(:
所以有一些Object会保留共享内容:
class Objs {
private $data = [];
final public static function set($key, $instance, $preventReset = false) {
if($preventReset === true AND isset(self::$data[$key])) {
return self::$data[$key];
}
return self::$data[$key] = $instance;
}
final public static function get($key, $instance) {
return self::$data[$key];
}
}
并在您的数据库连接文件中:
require_once('classes/Objs.php');
Objs::set('db', $dbh, true);
并在您的其他文件中:
$stmt = Objs::get('db')->prepare('SELECT * FROM city_tbl');
答案 1 :(得分:0)
我也遇到了这个问题。错误是我在声明函数之前调用了函数。因此,我更改了顺序,以便在声明该函数后调用该函数。