PHP PDO准备和执行

时间:2018-08-18 20:33:55

标签: php mysql pdo prepared-statement

我遇到以下错误:

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

不幸的是,我没有看到问题:

    $sql = "UPDATE work 
            SET status = :status, date_from = :dateFrom
            WHERE id = :id
            ";
    $query = $database->prepare($sql);
    $query->execute(array(
        ':status' => $status,
        ':date_from' => $dateFrom,
        ':id' => $id
    ));

2 个答案:

答案 0 :(得分:4)

它是拼写错误

:dateFrom !== :date_from

因此将代码更改为

$sql = "UPDATE work 
            SET status = :status, date_from = :dateFrom
            WHERE id = :id
            ";
    $query = $database->prepare($sql);
    $query->execute(array(
        ':status' => $status,
        ':dateFrom' => $dateFrom,
        ':id' => $id
    ));

答案 1 :(得分:0)

prepared方法将生成一个没有值的预编译查询,execute方法将生成一个与每个空参数相关联的值数组,其余的发生在低于SQL的级别,在该级别对查询进行预编译并提取值只有在此之后,才能避免著名的SQL注入。 只需分享一下,您就可以了解实际发生的情况。