我已经在pdo-> prepare()上搜索了几个答案,但没有一个答案完全解决了我正在遇到的情况。Web主机可以阻止pdo-> prepare()运行吗?
我刚刚将客户网站的网络主机改为1and1。我的本地机器上的开发工作不在1and1托管服务器上工作。是的,PDO在那里,PHP版本7.0已经安装并可以运行。
这是我DBClass
class DBClass {
public static function dbConnect() {
$host_name = "host";
$database = "db";
$user_name = "un";
$password = "pw";
try {
return new PDO("mysql:host=$host_name; dbname=$database;", $user_name, $password);
} catch (PDOException $e) {
return "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
}
这里是我的处理程序产生在这个网站的所有网页的代码。
$dbConn = DBClass::dbConnect();
echo "<h3>Standard PDO using dbh->query</h3>";
$stmt = $dbConn->query("SELECT * FROM vfs");
$recs = $stmt->fetchAll();
foreach ($recs as $rec) {
echo "id: " . $rec['id'] . ", parent: " . $rec['parent'] . ", url: " . $rec['url'] . ", short_url: " . $rec['short_url'] . " title: " . $rec['title'] . "<br />";
}
echo "<h3>Running dbh->prepare</h3>";
$pstmt = $dbh->prepare("SELECT * FROM vfs WHERE url = :url || short_url = :url");
$pstmt->bindParam(':url', $_SERVER['REQUEST_URI'], PDO::PARAM_STR, 255);
$pstmt->execute();
$vfsCnt = $pstmt->rowCount();
if($pstmt->rowCount() == 1){
$pgRec = $pstmt->fetch(PDO::FETCH_ASSOC);
$pstmt = $dbConn->prepare("SELECT * FROM templates WHERE id = ?");
$pstmt->execute(array($pgRec['template_id']));
if($pstmt->rowCount() == 1){
$templateRec = $pstmt->fetch(PDO::FETCH_ASSOC);
} else {
$pstmt = $dbConn->prepare("SELECT * FROM vfs WHERE url = '/404.php' || short_url = '/404.php'");
$pstmt->execute();
$pgRec = $pstmt->fetch(PDO::FETCH_ASSOC);
$pstmt = $dbConn->prepare("SELECT * FROM templates WHERE id = ?");
$pstmt->execute(array($pgRec['template_id']));
$templateRec = $pstmt->fetch(PDO::FETCH_ASSOC);
}
} else {
$pstmt = $dbConn->prepare("SELECT * FROM vfs WHERE url = '/404.php' || short_url = '/404.php'");
$pstmt->execute();
$pgRec = $pstmt->fetch(PDO::FETCH_ASSOC);
$pstmt = $dbConn->prepare("SELECT * FROM templates WHERE id = ?");
$pstmt->execute(array($pgRec['template_id']));
$templateRec = $pstmt->fetch(PDO::FETCH_ASSOC);
}
代码的顶部执行,从dbo->查询(拉),而pdo->准备()触发以下错误
Fatal error: Uncaught Error: Call to a member function prepare() on null in /homepages/3/d692026076/htdocs/aeallord.com/public/cms.php:28 Stack trace: #0 {main} thrown in /homepages/3/d692026076/htdocs/aeallord.com/public/cms.php on line 28
我不明白为什么pdo->当pdo-> query()运行显示数据库连接已经建立时,prepare()会触发并发生错误,可以查询它,但是pdo-> prepare()会导致失败。上面的代码的
结果可以在aeallord.com
任何指导可见于我的代码错误,或者如果有某种方式的1and1可以从执行将不胜感激停止pdo->制备()。
我无法编辑我的问题,但我更新了aeallord.com上的代码,以从$ dbh-> prepare中声明$ dbConn-> prepare()。这是我在发布多次尝试让prepare()正确触发后才发布的一个位置。 – aallord