每次我发送 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);
}
}
脚本运行良好。让我展示一下,我想要脚本做什么:
- 我第一次上传示例3张图片:
字段 "gallery_id" 看起来像:
id | patch | gallery_id
---------------------------------
1 | some patch | 1
2 | some patch | 1
3 | some patch | 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);
}
}
这是我的 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);
}
}
脚本运行良好。让我展示一下,我想要脚本做什么:
- 我第一次上传示例3张图片: 字段 "gallery_id" 看起来像:
id | patch | gallery_id --------------------------------- 1 | some patch | 1 2 | some patch | 1 3 | some patch | 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);
}
}