准备好的Statement和SQL不同的结果

时间:2014-08-09 20:14:19

标签: php mysql sql mysqli prepared-statement

我正在使用设计系统来获取使用INSERT语句的状态的最新更新。 Prepared语句块看起来像这样。

$load_status = $db->prepare('SELECT `statusID` FROM  `tor_status` WHERE  `requestID`=? ORDER BY  `timestamp` DESC LIMIT 1');
$load_status->bind_param('i',$request_id);
$load_status->execute();
$load_status->bind_result($request_status);
$load_details->fetch();

$status_denied="";
$status_approved="";
$selected = " checked";
//Preselect approved/denied status if applies
switch ($request_status){
    case 0:
        break;
    case 1:
        $status_pproved = $selected;
        break;
    case 2:
        $status_denied = $selected;
        break;
}

但是,使用此数据运行时

| changeID | timestamp | requestID | statusID |
 | 1 | 6/10/2014 11:17 | 1 | 0 | 
 | 2 | 6/10/2014 11:17 | 2 | 0 | 
 | 3 | 6/10/2014 11:33 | 3 | 0 | 
 | 4 | 6/10/2014 11:41 | 4 | 0 | 
 | 5 | 6/10/2014 13:24 | 5 | 0 | 
 | 9 | 6/17/2014 12:30 | 6 | 0 | 
 | 10 | 6/17/2014 13:35 | 7 | 0 | 
 | 11 | 8/9/2014 15:09 | 8 | 0 | 
 | 12 | 8/9/2014 15:13 | 3 | 1 | 
 | 13 | 8/9/2014 15:14 | 3 | 0 | 
 | 14 | 8/9/2014 15:14 | 6 | 0 | 
 | 15 | 8/9/2014 15:28 | 7 | 2 | 
 | 16 | 8/9/2014 15:29 | 6 | 1 | 

在DB中运行SQL语句返回“1”,并且在查找requestID为6时,准备好的返回“0”。有人有任何建议吗?

1 个答案:

答案 0 :(得分:0)

看起来这可能是你的问题:

$status_approved="";
...
case 0:
    break;
case 1:
    $status_pproved = $selected;
    break;

您永远不会将$status_approved设置为新的,可能是未读的变量$status_pproved,因此案例01的行为相同。

<强>更新

应:

$load_details->fetch();

Be:

$load_status->fetch();