2017-07-29 46 views
0

我已经在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->制备()。

+0

我无法编辑我的问题,但我更新了aeallord.com上的代码,以从$ dbh-> prepare中声明$ dbConn-> prepare()。这是我在发布多次尝试让prepare()正确触发后才发布的一个位置。 – aallord

回答

0

Call to a member function prepare() on null意味着您试图对未定义的内容调用方法。

$dbh不是PDO对象。 $dbConn是你的对象。

$dbConn = DBClass::dbConnect(); 
// snip 
$pstmt = $dbh->prepare("SELECT * FROM vfs WHERE url = :url || short_url = :url"); 
+0

将代码更新到$ dbConn-> prepare(),结果没有差异。这是我的不好,尝试了几件事,忘了改变那一个位置.. – aallord

+0

BTDT。现在什么是错误信息? –

+0

显示相同的错误消息。因此,为什么我想知道主持人是否阻止了dbo-> prepare()的运作。 – aallord