我很难过,我改变了主机,现在我正在接受#34;在非对象上调用成员函数prepare()"在旧服务器上已经工作了几个月的脚本上。我在这里读过并尝试了一些我发现的东西,但似乎没有什么能让它再次发挥作用。
我是新手,所以请慢慢清楚地说。 ;)
$dbh = connect_db();
$sql = 'SELECT count(*) FROM ppipn WHERE txn_id = :txn_id';
$result = $dbh->prepare($sql);
$result->execute(array(':txn_id' => $txn_id));
$number_of_rows = $result->fetchColumn();
if ($number_of_rows>0){
die();
}
功能:
function connect_db()
{
$DbHost = 'localhost';
$DbName = '***n';
$DbUser = '***';
$DbPass = '***';
$table;
try
{
$connection = new PDO('mysql:host='.$DbHost.';dbname='.$DbName, $DbUser, $DbPass);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connection->setAttribute(PDO::ATTR_PERSISTENT, true);
}
catch (PDOException $e)
{
// Proccess error
echo 'Cannot connect to database: ' . $e->getMessage();
}
return $connection;
}
答案 0 :(得分:4)
此错误表示$ dbh-> prepare()行中的$ dbh不是对象。
你的connect_db()函数可以返回一个构建的PDO对象,或者回显“无法连接”并返回一个名为$ connection的变量,该变量是空的。
您的connect_db()函数几乎肯定无法连接,并且您没有看到错误回显。
答案 1 :(得分:3)
"它可能是register_globals问题??????虽然我现在倾向于服务器问题。如果有人有任何想法可能是服务器问题,我很乐意听到它。主持人是Bluehost。" - user3154948
根据Bluehost的文档https://my.bluehost.com/cgi/help/89
Host name = (use the server IP address)
您现在正在使用localhost
。
您以前的主机数据库设置可能要求您使用localhost
,但Bluehost的设置似乎不是这里的情况。这是从服务器更改为服务器/托管服务的正常现象。
以下内容来自他们的网站:https://my.bluehost.com/cgi/help/89
Configuration Settings: Use the following configuration settings for connecting to your database Host name = (use the server IP address) Database name = (cpanelUsername_databaseName) Database username = (cpanelUsername_databaseUsername) Database password = (the password you entered for that database user) MySQL Connection Port = 3306 TCP or UDP, either is fine.
因此,请将localhost
更改为他们为您指定的IP地址。查看您的电子邮件,了解在注册时发送给您的任何详细信息,或contact Bluehost以了解您应该使用的IP地址设置。
$DbHost = 'localhost'; // change this