2013-12-20 61 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 

,看行号 - 它会帮助你找到问题点。