INSERT语句中的WHERE子句使用mysql / php

时间:2015-06-13 22:41:33

标签: php mysql sql-insert

在Google上搜索后,我才知道, 我不能在我的INSERT查询中使用WHERE子句。 但我想在“Book_4”列中插入一个值,其中“Student_ID = 1”

我该怎么做? 有没有替代方法呢?

会感激你!

$Query = "INSERT INTO issued_books (Book_4) VALUES ('$IssuedBookNumber')" ;

EDITED: 更多细节 使用插入查询,当我在我的表中的“Student_ID”列中插入一个值。 Student_ID行(Student_ID除外)中的所有列在我的数据库中显示为0。 根据DB,我知道这意味着什么。 它可能是Null或数字0。 如果它是数字0,则应使用UPDATE语句更新它。 但每当我试图更新它时,它永远不会使用UPDATE语句更新。这就是我要问的原因!

P.S:所有列都有数据类型INT。

希望你明白我想说的话:)。

这是完整的代码。 假设:已创建具有值2的Student_ID。 IssuedBookNumber = 51

使用以上值: Result =创建一个新行,其中所有列都为0,但“IssuedBookNumber”列的值为= 51。

虽然我想要,结果应该是: 在行Student_ID = 2时,Book_4应为51。

重点是,当我在Student_ID上插入一个值时,所有其他列在同一行上变为0。但是当同一行中的任何列具有除0之外的任何数字时(当我在Student_ID中插入值时,该列自动出现在所有列上)。更新查询将起作用..!

$IssuedBookNumber = $_POST['IssuedBookNumber'];
     $Student_ID = $_POST['StudentId'];

     $FetchingQuery = "SELECT * FROM issued_books WHERE Student_ID='" . $Student_ID . "'";

     $RunFetchingQuery = mysql_query($FetchingQuery);


     while ( $row = mysql_fetch_array( $RunFetchingQuery ) ) {

          $Book_1 = $row[ 'Book_1' ];
          $Book_2 = $row[ 'Book_2' ];
          $Book_3 = $row[ 'Book_3' ];
          $Book_4 = $row[ 'Book_4' ];
          $Book_5 = $row[ 'Book_5' ];

          }

          if(!empty($Book_4))
          {
               $Update =  "UPDATE issued_books SET Book_4='$IssuedBookNumber' WHERE Student_ID= '$Student_ID'";
             mysql_query ($Update);
          }

          else
          {
               $AddQuery = "INSERT INTO issued_books (Book_4) VALUES ('$IssuedBookNumber')";
    mysql_query ($AddQuery);
          }

4 个答案:

答案 0 :(得分:2)

那不是INSERT。这是 UPDATE 。 INSERT语句插入 new 行。 UPDATE语句更新现有行。

UPDATE issued_books
SET Book_4 = '$IssuedBookNumber'
WHERE Student_ID = '$Student_ID'

(我假设您已正确转义$IssuedBookNumber$Student_ID

答案 1 :(得分:1)

如果您可以在2列组合上添加唯一索引(book_4,student_id)

这将是一个很好的查询,并且可以替换上面的大部分代码

INSERT INTO issued_books (book_4, student_id) VALUES('$IssuedBookNumber','$Student_ID')
ON DUPLICATE KEY UPDATE
SET Book_4 = '$IssuedBookNumber';

注意:您不需要上面的循环,因为$ Book_4将始终返回最后一行的值。

您的代码将如下所示:)

$IssuedBookNumber = $_POST['IssuedBookNumber'];
$Student_ID = $_POST['StudentId'];

$Update =  "UPDATE issued_books SET Book_4='$IssuedBookNumber' WHERE Student_ID= '$Student_ID'";
mysql_query ($Update);

你应该考虑的事情,

  1. 切换到使用PDO或mysqli
  2. 转义您的变量是您的代码易受SQL注入攻击。也许在您切换到PDO或mysqli之后,您可以使用prepare语句。

答案 2 :(得分:0)

为什么不这样:

$Query = "INSERT INTO issued_books (Book_4, Student_ID)
           VALUES ('$IssuedBookNumber', '$Student_ID')"

答案 3 :(得分:0)

使用update声明。

update issued_books set Book_4 = $IssuedBookNumber
where Student_ID = '$Student_ID'