PHP MySQL/PDO 更新问题

标签 php mysql pdo sql-update

我想做的是拖/放顺序设置。我有 jQuery 设置来将序列化作业发送到我的 php 脚本,但由于某种原因它没有更新。我有一个 echo 语句,它向我显示对象的顺序是正确的:

    ID = 2 Counter = 1
    ID = 1 Counter = 2

这也意味着该函数被正确调用,但它似乎并没有真正更新表,我的其余插入/更新工作正常,所以它不是连接。

功能:

public function set_member_order($OrderArray) {
    $query = $this->db->prepare(
        "UPDATE
            `member`
        SET
            `sort` = :sort
        WHERE
            `member_id` = :member_id");
    $sort = 0;
    $member_id = 0;
    $query->bindValue(':sort', $sort);
    $query->bindValue(':member_id', $member_id);
    $counter = 1;

    foreach ($OrderArray as $member_id) {
        $sort = $counter;
        echo "ID = ".$member_id." Counter = ".$sort. "<br />";
        $query->execute();
        $counter ++;
    }
}

我一定错过了一些东西,因为这应该相当简单,但我无法确定它。当我运行它并检查数据时,它说排序顺序仍然是 1,1 和 2,2(默认值)。我还确信这些 ID 是正确的,因为我首先从数据库中提取了它们。

$rows = $query->rowCount();

还显示每行有 0 行受到影响,当它应该更新时,不确定为什么它没有命中数据库,我是否错误地绑定(bind)了它们?将它们转换为 int 并使用 PDO::PARAM_INT 也没有帮助。该表中仅有的两个member_id是1和2。如果我手动运行它并手动输入值,该查询也是有效的。

编辑: 我尝试将member_id初始化更改为

$member_id = 1;

并将 1 的 member_id 设置为 0 排序,这对我来说确实没有意义。

最佳答案

您使用了错误的绑定(bind)方法。您需要bind the parameter而不是值(绑定(bind)时两者均为 0)。

更改:

$query->bindValue(':sort', $sort);
$query->bindValue(':member_id', $member_id);

至:

$query->bindParam(':sort', $sort);
$query->bindParam(':member_id', $member_id);

您可以使用bindValue()但是在设置变量之后,您必须在循环中绑定(bind)。

关于PHP MySQL/PDO 更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21893039/

相关文章:

javascript - 我的jquery ajax代码无故刷新页面

php - 打印包含 php 和 sql 值的表

php - 如何使用 PHP 将已解析的 XML 传递到 mySQL 数据库中?

php - 选择标签更新另一个

php - 验证 mysql 列数据并在该行中查找匹配的电子邮件?

php - pdo 将变量绑定(bind)到准备好的 mysql 语句并使用 while 循环获取以显示在表中

php - Google Recaptcha 错误,登录时未完成拼图但显示勾号

php - 在不迁移的情况下向 Eloquent 模型添加一列 -PHP

javascript - PHP 和 html 表,使用 tablesorter javascript

php - 用数值存储在数据库描述中