【问题标题】:Each time I send INSERT query add + 1 to a mysql database's field. INSERT (NOT UPDATE)每次我发送 INSERT 查询添加 + 1 到 mysql 数据库的字段。插入(不更新)
【发布时间】:2016-03-04 10:37:58
【问题描述】:

这是我的名为 画廊 的桌子: Click here to see a table named galleries 如您所见,有名为:id、path 和 gallery_id 的字段。 我写了一个脚本,在插入查询后上传多张图片:

for($i=0; $i<count($_FILES['image']['name']); $i++)
{
    $path = 'sent_images/'.$_FILES['image']['name'][$i];
    $gallery_id = '1';

    $mysqli = new mysqli('localhost', 'root', '', 'database');

    $q = $mysqli->prepare('INSERT INTO galleries (path, gallery_id) VALUES (?, ?)');
    $q->bind_param('si', $path, $gallery_id);
    $q->execute();

    if($q->affected_rows > 0)
    {
        move_uploaded_file($_FILES['image']['tmp_name'][$i], $path);
    }
}

脚本运行良好。让我展示一下,我希望脚本做什么:

  1. 我第一次上传了 3 张图片作为示例: “gallery_id”字段如下所示:
id | patch       | gallery_id 
---------------------------------
1  | some patch  |   1
2  | some patch  |   1
3  | some patch  |   1
  1. 我第二次上传了 5 张图片作为示例: “gallery_id”字段如下所示:
id | patch       | gallery_id 
---------------------------------
1  | some patch  |   1
2  | some patch  |   1
3  | some patch  |   1
4  | some patch  |   2
5  | some patch  |   2
6  | some patch  |   2
7  | some patch  |   2
8  | some patch  |   2

等等

我发现了类似的东西:

INSERT INTO galleries (path, gallery_id) VALUES (?, ?) SELECT max(gallery_id) + 1 FROM galleries

会有所帮助,但我不知道如何在上面的脚本中使用它。

///////////////////////////////////////////////////////////////////////

我们的论坛朋友 Vigneswaran S 帮助我找到了解决方案。为了使代码正常工作,我们只需:

$mysqli = new mysqli('localhost', 'root', '', 'gracom');

$q = $mysqli->prepare('SELECT MAX(gallery_id) FROM galleries');
$q->execute();
$q->bind_result($gallery_id);
$q->store_result();

while($q->fetch())
{
    $gallery_id = $gallery_id + 1;

    for($i=0; $i<count($_FILES['image']['name']); $i++)
    {
        $path = 'sent_images/'.$_FILES['image']['name'][$i];

        $q = $mysqli->prepare('INSERT INTO galleries (path, gallery_id) VALUES (?, ?)');
        $q->bind_param('si', $path, $gallery_id);
        $q->execute();

        if($q->affected_rows > 0)
        {
            echo 'Done!';
            move_uploaded_file($_FILES['image']['tmp_name'][$i], $path);
        }
    }
}

谢谢你们的帮助,伙计们。

【问题讨论】:

  • 抱歉,您的帖子不清楚。描述与您链接到的示例图像不匹配。示例中的所有 gallery_ids 都有一个数字,但在文本中您有多个数字。您对 gallery_id 字段的具体目标是什么?
  • 感谢您的回答。我的目标是:我第一次上传一些图片,插入了一些行,其中所有字段“gallery_id”的编号为“1”。当我两次上传一些图片时,会插入一些行,新插入的“gallery_id”的所有字段都有数字“2”。每次我向表中插入新行时,“gallery_id”字段都比上次插入​​的字段高约 +1。
  • 你能添加你预期的输出吗?您是否为您的 id 使用了自动增量?
  • 你好。当然,我将 auto_increment 用于“id”字段并且它有效。我编辑了主题,你能刷新一下页面看看我要做什么吗?谢谢。现在应该清除了。
  • 你的代码有什么问题?你想发生什么?你的 gallery_id 应该总是 1 正确

标签: php mysql mysqli insert field


【解决方案1】:
$mysqli = new mysqli('localhost', 'root', '', 'gracom');
$gallery_id = $mysqli->prepare('SELECT MAX(gallery_id) FROM galleries'); // returns max value
$gallery_id->execute();
$gallery_id = $gallery_id + 1; // retrieve the value and increment 

for($i=0; $i<count($_FILES['image']['name']); $i++)
{
  $path = 'sent_images/'.$_FILES['image']['name'][$i];

  $q = $mysqli->prepare('INSERT INTO galleries (path, gallery_id) VALUES (?, ?)');
  $q->bind_param('si', $path, $gallery_id);
  $q->execute();

  if($q->affected_rows > 0)
  {
    move_uploaded_file($_FILES['image']['tmp_name'][$i], $path);
  }
}

【讨论】:

  • 感谢您的回答,但它仍然不起作用。每个新插入行的“galery_id”都提高了 1。所以它看起来像:id |补丁 |图库_id --------------------------------- 1 |一些补丁| 1 2 |一些补丁| 1 3 |一些补丁| 1 4 |一些补丁| 2 5 |一些补丁| 3 6 |一些补丁| 4 7 |一些补丁| 5 8 |一些补丁| 6 但真的很感谢,伙计,你试图解决这个问题。
  • @WojciechGlapa:您的预期输出应该是最后插入的 $gallery_id 值的增量?我是对的
  • 嘿,那里!我刚刚解决了这个问题。太感谢了!没有你,可能需要数年! =) 我将在主题中添加解决方案。等一下。
  • @WojciechGlapa:很高兴解决了您的问题 :)。
【解决方案2】:

查找 mysql 文档以获取 AUTO_INCREMENT。您可以将列定义为每次插入记录时自动递增。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2011-09-23
    相关资源
    最近更新 更多