2013-12-20 62 views
-3

我目前正在爲一個客戶端項目工作,但因爲我是pdo新手,我不知道如何處理它繼續吐出的錯誤。我正在使用的代碼也不是我的,所以這給混合添加了一些混淆。它不斷告訴我:PDO mysql錯誤

Query failed: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server 
version for the right syntax to use near '' at line 1 

我有誤差縮小到這些行:

$regid = $dbh->lastInsertId(''); 

$dupsid = true; 
while ($dupsid){ 
    srand((double)microtime()*1000000); 
    $maxrand = 100000000; 
    $rand_sid = rand(); 
    $check_sid = "select reguniqid from v_events_registrants where reguniqid = :RAND_SID"; 
    $stmt = $dbh->prepare($check_sid); 
    $stmt->bindValue(':RAND_SID', $rand_sid); 
    $stmt->execute(); 

    $num_result = $stmt->rowCount(); 
    if ($num_result == 0) $dupsid = false; 
} 

$uniqid_upd = "update v_events_registrants set reguniqid = :RAND_SID where registrant_id = :REGID"; 
$stmt = $dbh->prepare($uniqid_upd); 
$stmt->bindValue(':RAND_SID', $rand_sid); 
$stmt->bindValue(':REGID', $regid); 
$stmt->execute(); 
在這種情況下

這裏$ REG在其中添加表的主鍵的最後幾個項目。起初,我認爲這是問題,但是當我清除了',並且'我得到一個無效的id錯誤,我猜測它來自pdo的下一次執行。請幫助,因爲這個錯誤真的讓我失望完成這個項目爲我的客戶。

+0

我的猜測是'$ rand_sid'或'$ regid'沒有值。 – Robbert

+0

'var_dump($ rand_sid);'顯示什麼? –

+0

int(445737646)string(3)「872」是我從var_dump或$ rand_sid和$ regid得到的。 – NSaid

回答

2

你的第一行定義$ REG,然後嘗試使用未定義$ REGID

+0

對不起,我做了一個複製和粘貼錯誤。是不是在$ reg – NSaid

0

幾乎正沒有定義$ REGID,至少不是代碼的範圍內,包括你。

跟蹤那個變量返回或者定義爲某個東西,你應該修復。

+0

正確的形式抱歉,我做了複製和粘貼錯誤。對於$ reg – NSaid

-1

由於你的$ rand _sid爲整數類型,兩次使用bindValue爲$ rand_sid你應該添加的數據類型PDO :: PARAM_INT(需要PDO :: PARAM_STR爲默認值),就像這樣:

$stmt->bindValue(':RAND_SID', $rand_sid, PDO::PARAM_INT); 
+0

而言是不正確的形式PARAM_STR有什麼問題? –

0

最有可能你的錯誤就在於某處其他。

所以,首先擺脫OV任何在try..catch塊在你的代碼
然後打開錯誤的
報告然後再次運行你的代碼並找到從堆棧跟蹤發生錯誤的真正地方。
然後你得到錯誤的查詢,寫這樣

select 
reguniqid 
from 
v_events_registrants 
where 
reguniqid 
= 
:RAND_SID 

,看行號 - 它會幫助你找到問題點。