我正在开发一个使用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();
}
答案 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扩展的分步过程:
答案 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之前