mysql pdo中的常规错误

时间:2014-03-23 04:53:18

标签: php mysql pdo

我正在尝试使用SELECT LAST_INSERT_ID()获取主键,但收到错误SQLSTATE[HY000]: General error

  function logCallDetails($db,$student_id,$currentStory,$currentCall){
        try{
        $query= "INSERT INTO `call`(`student_id`, `story_id`, `call_number`) VALUES ('$student_id','$currentStory','$currentCall');SELECT LAST_INSERT_ID();";
        echo $query;
        $result=$db->prepare($query);
        $result->execute();
        $result = $result->fetchall(PDO::FETCH_ASSOC);


        #$result->closeCursor();
        return $result;
        }
        catch(PDOException $e) {
            echo $e->getMessage();  
        }
}

initialize.php

$get_call_id=logCallDetails($db,$student_id,$call_number,$story_id);
            foreach($get_call_id as $row=>$s)
            {
                foreach($s as $k=>$v)
                {
                    echo $k.'->'.$v.'<br/>';
                }
            }

2 个答案:

答案 0 :(得分:0)

您在一次查询调用中获得了2个单独的查询。基础MySQL驱动程序出于安全原因不允许这样做。您必须单独准备/执行INSERTSELECT查询。

答案 1 :(得分:0)

function logCallDetails($db,$student_id,$currentStory,$currentCall){
    $query= "INSERT INTO `call`(`student_id`, `story_id`, `call_number`) 
             VALUES (?,?,?)";
    $result=$db->prepare($query);
    $result->execute(array_slice(func_get_args()));
    return $db->lastInsertId();
}

$get_call_id = logCallDetails($db,$student_id,$call_number,$story_id);
echo $get_call_id;