使用ORDER BY更新视图,LIMIT在phpMyAdmin中工作,但不能在PHP中工作

时间:2018-05-06 16:19:27

标签: php mysql

我使用两个表的INNER JOIN创建了一个MySQL视图。它将第一个表中的ID号与第二个表中的相同ID进行匹配,以便访问更多数据。

CREATE OR REPLACE VIEW vy_enheterILager
AS
(
    SELECT enheter.enhID, enheter.produktID, batcher.inDatum, enheter.utDatum
    FROM enheter
    INNER JOIN batcher ON enheter.batchID = batcher.batchID
    WHERE enheter.utDatum IS NULL
)

我想更新utDatum列,其中包含视图前两行的特定日期,由inDatum列排序。

这适用于phpMyAdmin:

UPDATE vy_enheterILager
SET utDatum = '2018-05-06'
WHERE produktID = 3
ORDER BY inDatum
LIMIT 2

但是,当尝试使用预准备语句从PHP执行此操作时,它不起作用。

$sql = "UPDATE vy_enheterILager SET utDatum = ? WHERE produktID = ? ORDER BY inDatum LIMIT ?";
if($stmt = $mysqli->prepare($sql)){
    // Bind variables to the prepared statement as parameters
    $stmt->bind_param("sii", $param_utLevDatum, $param_utLevProdukt, $param_utLevAntal);

    // Set parameters
    $param_utLevDatum = $utLevDatum;
    $param_utLevProdukt = $utLevProdukt;
    $param_utLevAntal = $utLevAntal;

    // Attempt to execute the prepared statement
    if($stmt->execute()){
        // Records created successfully
        header("location: lager.php");
        exit();
    } else{
        printf("Error: %s.\n", $stmt->error);
    }
}

我收到以下错误:

  

UPDATE和ORDER BY的使用不正确。

为什么它在phpMyAdmin中工作而不是在我的PHP脚本中?提前谢谢。

编辑:我相信这是一个新问题。我已经看到UPDATE的文档提到了这个:

  

“对于多表语法,UPDATE更新每个表中的行   在满足条件的table_references中命名。在这种情况下,   ORDER BY和LIMIT不能使用。“

然而,如果我不想支持我的工作,那么它是如何从phpMyAdmin而不是从PHP工作的呢?它根本不应该工作吗?它是同一台服务器!

0 个答案:

没有答案