mysql update 正在更新所有行而不是一个

Posted

技术标签:

【中文标题】mysql update 正在更新所有行而不是一个【英文标题】:mysql update is updating all rows instead of one 【发布时间】:2017-10-28 07:13:56 【问题描述】:

我遇到了一个问题,我似乎无法找出问题所在。我知道 SQL 注入,但考虑到用户我并不担心。

好的,我遇到的问题是更新时。如果我输入$update = "UPDATE robert SET req='$reqs' WHERE id='$x'"; 它什么也不做,如果我输入$update = "UPDATE robert SET req='$reqs'"; 它会更新整个列,这不是我想要的。 完整代码如下:

<?php
                $i = 0;
                $x = 0;
                $sql = "SELECT * FROM robert";
                $result = mysqli_query($conn, $sql);

                while($row = mysqli_fetch_assoc($result))
                    echo "<form action='rmcclanahan.php' method='post'>
                    <table><tr>";
                    echo "<td><input type='text' name='date".$i."' value='".$row['date']."' size='8'></td>";
                    echo "<td><input type='text' name='req".$i."' value='".$row['req']."' size='6'></td>";
                    echo "<td><input type='text' name='po".$i."' value='".$row['po']."' size='6'></td>";
                    echo "<td><input type='text' name='requestor".$i."' value='".$row['requestor']."' size='6'></td>";
                    echo "<td><input type='text' name='line".$i."' value='".$row['line']."' size='5'></td>";
                    echo "<td><input type='text' name='description".$i."' value='".$row['description']."' size='12'></td>";
                    echo "<td><input type='text' name='price".$i."' value='".$row['price']."' size='12'></td>";
                    echo "<td><input type='text' name='supplier".$i."' value='".$row['supplier']."' size='6'></td>";
                    echo "<td><input type='text' name='eleven".$i."' value='".$row['eleven']."' size='12'></td>";
                    echo "<td><input type='text' name='carcap".$i."' value='".$row['carcap']."' size='12'></td>";
                    echo "<td><input type='text' name='carnum".$i."' value='".$row['carnum']."' size='6'></td>";
                    echo "<td><input type='text' name='engineering".$i."' value='".$row['engineering']."' size='12'></td>";
                    echo "<td><input type='text' name='costcenter".$i."' value='".$row['costcenter']."' size='6'></td>";
                    echo "<td><input type='text' name='accnum".$i."' value='".$row['accnum']."' size='5'></td>";
                    echo "<td><input type='text' name='recieved".$i."' value='".$row['recieved']."' size='6'></td>";
                    echo "<td><input type='text' name='recdate".$i."' value='".$row['recdate']."' size='8'></td>";
                    echo "<td><button type='submit' name='submit".$i."'>Edit</button></td>";
                    echo "</tr></table>
                    </form>";


                    $i++;
                    $x++;

                    
                    if(isset($_POST['submit'.$i.'']))
                            $reqs = $_POST['req'.$i.''];
                            $update = "UPDATE robert SET req='$reqs' WHERE id='$x'";
                            $qry = mysqli_query($conn, $update);

                            

【问题讨论】:

MySQL 看不到您的 PHP 代码,更不用说运行它了。重要的是实际生成的 SQL 代码。 if 语句位于 while 循环之外,因此 $i$x 将始终比表中的行数大 1。这似乎是个问题。 我已经把它移到了递增变量上方的 while 循环中,这是有道理的,但它仍然不起作用。 【参考方案1】:

查询应该是这样的:

$update = "UPDATE robert SET req='$reqs' WHERE id='$row['id']'";

$X 是一个在每次迭代中递增的数字,id 可以不同于 $x

【讨论】:

太棒了,谢谢先生。 if(isset($_POST['submit'.$i.''])) $reqs = $_POST['req'.$i]; $id = $_POST['id' . $i]; $update = "UPDATE robert SET req='$reqs' WHERE id='$id'"; $qry = mysqli_query($conn, $update); $i++; $x++; 你可以直接使用 $row['id'] 而不是 $_POST['id' 。 $i]。 那就更好了;更少的代码。非常感谢。

以上是关于mysql update 正在更新所有行而不是一个的主要内容,如果未能解决你的问题,请参考以下文章

AG-Grid:updateRowData(update: ItemsArray) 影响所有行而不是选定行

Codeigniter 查询更新所有行而不是 1

Coredata 总是更新行而不是快速插入新行

PySpark - 为单个行而不是所有记录设置/删除列

mysql - 从多个表中获取相关行而不使用所有组合

Oracle操纵数据库表