2013-09-30 69 views
0

我想转换我的php脚本使用准备好的语句,它给了我一个错误....任何人都知道什么是错的?PHP准备好的声明非对象错误

<?php 
define("DB_DSN","xxx"); 
define("DB_HOST","xxx"); 
define("DB_USER","xxx"); 
define("DB_PASS","xxx"); 

$con = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('Could not connect: ' . mysql_error()); 
mysql_select_db(DB_DSN) or die('Could not select database'); 
$stmt = $con->prepare("UPDATE Level01 SET Deaths=:Deaths WHERE DeathID= :DeathID"); 
$stmt->bindParam(':Deaths', $deaths); 
$stmt->bindParam(':DeathID', $id); 

$id = base64_decode($_GET["id"]); 
$deaths = base64_decode($_GET["deaths"]);  
$uresult = $stmt->execute(); 
if(! $uresult) 
{ 
    die('Could not update data: ' . mysql_error()); 
} 
echo "Updated data successfully\n"; 
mysql_close($con); 
exit; 

这是我的错误:致命错误:调用成员函数的准备()非对象

+1

你会得到什么错误?请尽可能精确。 –

+0

MySQL扩展不支持预准备语句:使用MySQLi或PDO –

+0

致命错误:调用成员函数prepare()在非对象上 – Alan

回答

4

mysql_connect上不会返回MySQLi的对象,但一个MySQL的资源。

你似乎在混合MySQL和MySQLi。他们是而不是互相替换,因为MySQL不支持预准备语句。再次阅读manual,这里都有相当清楚的解释。

+0

感谢您的回复! 我尝试了PDO和MYSQLI方法,但都没有工作....我得到一个错误说,访问被拒绝服务器。我正在使用免费托管站点,那么有没有办法阻止PDO或MYSQLI的使用? – Alan

+0

@Alan,可能(可能?)扩展名不可用。尝试使用'php_info()'来查明。如果他们无法使用,请尽快远离主机。 –

0

您首先绑定您的变量,然后分配它们。尝试另一种方式圆:

$id = base64_decode($_GET["id"]); 
$deaths = base64_decode($_GET["deaths"]); 

$stmt->bindParam(':Deaths', $deaths); 
$stmt->bindParam(':DeathID', $id); 

如果它不是,那么请加入该错误信息您收到

0

你不能使用准备好的语句与MySQL,使用库MySQLi或PDO。