MySQLi Prepared Statement UPDATE影响0行,静默失败并进行错误检查

时间:2014-11-24 03:14:10

标签: php mysql mysqli prepared-statement

我大部分时间都在这一天上度过,希望那里有一些经验丰富的人可能会给我一个暗示。

设置

  • 表单元素的列表,每行都有一个复选框 - 即。选择 此列表中的图库图像
  • 每个元素都与数据库中的ID相关联,我使用ID作为表的主键,一个自动递增的整数
  • 表(er_pics)有一个名为'visible'的列,它是一个整数(不是布尔值),所以我可以使用不同的值来指示图库中不同类型的可见性 - 也可以模拟从没有实际销毁任何数据的画廊。

用法

  • 选中一个框以选择图像以执行三个操作之一(当前):
    1. 隐藏 - 将'可见'更改为0
    2. 显示 - 将'可见'更改为1
    3. 删除 - 将“可见”更改为5(或除1或0以外的任何内容)

我将在稍后添加支持以一次选择多个图像,但是现在我只想让它工作。无论如何,既然你已经知道我想要完成什么,那就让我给你看一些代码。


cpwin.php - 这会显示在弹出窗口中

if(isset($_POST['hideImg'])){
    if(isset($_POST['inP'])){
        if(!set_visible($mysqli, $_POST['inP'][0], 0)){
            echo("Error hiding image from gallery.");
        }
    }
}


functions.php - 在public_html之外的安全文件

function set_visible($mysqli, $id, $vis) {

    $visible = $vis + 0;
    $tID = $id + 0;

    if ($stmt = $mysqli->prepare("UPDATE er_pics SET visible = ? WHERE ID = ?") or die(mysqli_error($mysqli))) {

        $stmt->bind_param('ii', $visible, $tId) or die(mysqli_error($mysqli));
        $stmt->execute() or die(mysqli_error($mysqli));

        // this outputs "VIS: 0, ID: 2 Affected Rows: 0"
        echo("VIS: " . $visible . ", ID: " . $tID . ", Affected Rows: " . $stmt->affected_rows);

        return true;
    }
    return false;
}


<小时/>
我可以完全脱离我的摇杆,但我使用相同的代码来设置/取消设置用户帐户的“阻止”状态来自admin cp(相同的实用程序,相同的网站,相同的数据库,不同的表)

Here是我从截图中编辑的图片的链接,以帮助说明我看到的内容,以及我的解释是否不清楚。

我只是不确定在这个问题上还有哪些方面,我已经在一些相关网站上查看了我能找到的与此问题相关的所有答案。我已将错误报告语句添加到战略位置的代码中,并使其向我吐出某些,即使我必须在那里创建一个错误,只是为了获得响应。一切似乎都很好,除了它只是没有更新表。如果我找不到相当快的东西,我即将在我的网站上发布WTFSmack这个功能。

如果这个问题已经得到解答,我也很抱歉,因为我花了几个小时搜索一个问题,到目前为止已经干了。

感谢任何想要在这里指出正确方向的人。

[编辑] 我有一个单词说“可见”或“隐藏”位于列表中显示的图像旁边,表示图像在现场图库中的状态;其值取决于数据库中“可见”列中的值。勾选方框并单击“隐藏”时,应使用当前数据刷新窗口,并将图像指示为“隐藏”。我没有得到预期的行为,它只是说0行受到影响,而且DB数据对我来说根本没有变化。

[编辑] 感谢sectus,我想我已经意识到,如果你没有从默认设置错误级别,那么这样的事情会轻易滑倒。显然,$ tId和$ tID是不一样的,但如果你没有参加比赛,你甚至可能都不知道。 GG

0 个答案:

没有答案