2013-09-30 37 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。