使用命名参数的参数号异常无效

时间:2014-05-27 00:19:10

标签: php mysql

尝试对mysql数据库进行插入查询时,出现“无效参数号:参数未定义”异常。

我将结果作为json返回到我的Android应用程序。

if (!empty($_POST)) 
{

$query = "INSERT INTO attendance (tdate,slot_from,slot_to,coursecode,stud_id,remark) VALUES (:dat,:fromm,:too,:ccode,:stud,:rmk ) ";


$query_params = array(
    ':dat' => $_POST['datee'],
    ':from'=>$_POST['fromm'],
    ':to'=>$_POST['too'],
    ':ccode'=>$_POST['course'],
    ':stud'=>$_POST['sname'],
    ':rmk'=>$_POST['remark'],
    );

try 
{
     $stmt   = $db->prepare($query);
     $result = $stmt->execute($query_params);

    }
catch (PDOException $ex) 
{

    //or just use this use this one to product JSON data:
            $response["success"] = 0;
            $response["message"] = $ex->getMessage();
    $response["date"] = $_POST['datee'];
    $response["from"] = $_POST['fromm'];
    $response["to"] = $_POST['too'];
    $response["ccode"] = $_POST['course'];
    $response["stud"] = $_POST['sname'];
    $response["remark"] = $_POST['remark'];
            die(json_encode($response));

    }
}

2 个答案:

答案 0 :(得分:3)

中缺少m
':from'=>$_POST['fromm'],

应该是

':fromm'=>$_POST['fromm'],

使用命名参数时一定要小心,我自己很容易犯这样的错误

这就是为什么我更容易使用?占位符,这种方式在你的例子中:

$query = "INSERT INTO attendance (tdate,slot_from,slot_to,coursecode,stud_id,remark) VALUES (?,?,?,?,?,?) ";

$query_params = array(
    $_POST['datee'],
    $_POST['fromm'],
    $_POST['too'],
    $_POST['course'],
    $_POST['sname'],
    $_POST['remark'],
    );

然后:

$result = $stmt->execute($query_params);

你必须确保params处于良好状态(与查询相同)

答案 1 :(得分:1)

在您的查询中,您错误拼写from

$query = "INSERT INTO attendance (tdate,slot_from,slot_to,coursecode,stud_id,remark) VALUES (:dat,:fromm,:too,:ccode,:stud,:rmk ) ";

将其替换为:

$query = "INSERT INTO attendance (tdate,slot_from,slot_to,coursecode,stud_id,remark) VALUES (:dat,:from,:too,:ccode,:stud,:rmk ) ";