每次我发送 INSERT 查询添加 + 1 到 mysql 数据库的字段。插入(不更新)

Each time I send INSERT query add + 1 to a mysql database's field. INSERT (NOT UPDATE)

这是我的 table 名为 画廊 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

etc.

我发现类似:

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);
        }
    }
}

谢谢大家的帮助。

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

$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);
  }
}