PDO无法在GoDaddy服务器中运行

时间:2015-08-27 18:00:11

标签: php mysql pdo

我正在开发一个使用GoDaddy私人服务器的项目。看起来该项目正在使用mysql_connect连接到数据库。

之前我曾使用过PDO,并认为我只是在服务器中创建一个新文件,因此我可以使用PDO进行连接。但是我无法让它工作,我无法显示任何错误,当我运行此代码时似乎没有任何事情发生。

如果我尝试在该代码块之后回显字符串,则字符串不会显示,如果我在此代码块之前回显字符串,则字符串将显示。

如果我尝试执行准备好的声明,则没有任何反应。 PW,UN,HOST和db名称都是正确的。难道我做错了什么?

<?php
    error_reporting(E_ALL);
    $dns = "mysql:host=localhost;dbname=mainsql;";
    $username = "bowski";
    $passwd = "kingsman1";
    try {
        $db = new PDO($dsn, $username, $passwd);
} catch (PDOException $ex) {
        echo $ex->getMessage();
}

3 个答案:

答案 0 :(得分:4)

某些主机提供商甚至您自己的服务器可能默认情况下已禁用PDO或未安装PDO。 GoDaddy就是这样一家提供商。

我经常看到人们在类似的情况下苦苦挣扎,认为他们的PDO代码是错误的,并提出同样的问题。

因此,在检查PDO代码之前检查PDO驱动程序的可用性始终是一个好习惯。一个快速检查是执行phpinfo();调用,该调用转储已安装组件的(长)表。

即使安装了PDO,也是为了确保并保证PDO驱动程序已安装并正在运行。

在PDO代码之前添加PDO驱动程序检查程序代码,从而节省了一些不必要的调试时间:

if (!defined('PDO::ATTR_DRIVER_NAME'))
    echo 'PDO driver unavailable';

答案 1 :(得分:4)

以下是在Godaddy上启用PDO扩展的分步过程:

  1. 登录您的CPanel

  2. 转到您所在域的Web Hosting -> Manage

  3. 点击选择PHP版菜单

  4. enter image description here

    1. 现在,您可以从下拉列表中选择PHP版本。选择与所选版本不同的版本(例如5.4或5.5),然后单击设置为当前

    2. 之后,请检查您网站上所需的PHP扩展程序的复选框(例如PDO),然后点击底部的保存按钮。

    3. enter image description here

答案 2 :(得分:0)

我和你描述的情况完全相同。经过一段时间的混乱和调试,我发现了原因/解决方案。但仍然不确定为什么Godaddy PDO有这个问题。

PHP v5.4.45

<?php
$pdo = new PDO('mysql:localhost;dbname=mydb', $user, $pass);

$sth = $pdo->prepare('select * from tab limit 1');
$sth->execute();
$row = $sth->fetchAll();
echo '<pre>select * from test -- not working -- ';
print_r($row);

$sth = $pdo->prepare('select now()');
$sth->execute();
$row = $sth->fetchAll(PDO::FETCH_ASSOC);
echo "\nselect now -- working -- ";
print_r($row);

$sth = $pdo->prepare('show databases');
$sth->execute();
$row = $sth->fetchAll(PDO::FETCH_ASSOC);
echo "\nshow databases -- working -- ";
print_r($row);

$sth = $pdo->prepare('show tables');
$sth->execute();
$row = $sth->fetchAll(PDO::FETCH_ASSOC);
echo "\nshow tables -- not working -- ";
print_r($row);

$sth = $pdo->prepare('show privileges');
$sth->execute();
$row = $sth->fetchAll(PDO::FETCH_ASSOC);
echo "\nshow privileges -- working but not right -- ";
print_r($row);

$sth = $pdo->prepare('select * from information_schema.TABLES where TABLE_SCHEMA != \'information_schema\'');
$sth->execute();
$row = $sth->fetchAll(PDO::FETCH_ASSOC);
echo "\nselect * from information_schema.TABLES -- working -- ";
print_r($row);

没有错误 - 多么令人困惑。我测试了这个,有效:

<?php
$pdo = new PDO('mysql:localhost;dbname=mydb', $user, $pass);

$sth = $pdo->prepare('select * from mydb.tab limit 1');
$sth->execute();
$row = $sth->fetchAll();
echo '<pre>select * from test -- working !!! -- ';
print_r($row);

现在我想出了这个解决方案,但不确定它是否是Godaddy PDO的错误?

<?php
$pdo = new PDO('mysql:localhost', $user, $pass);

$sth = $pdo->prepare('use mydb');
$sth->execute();

$sth = $pdo->prepare('select * from tab limit 1');
$sth->execute();
$row = $sth->fetchAll();
echo '<pre>select * from test -- working !!! -- ';
print_r($row);

<强>结论:

看起来Godaddy PDO不使用dbname,您需要手动运行&#39; 使用dbname &#39;在新PDO 之后和任何其他SQL之前